java實(shí)現(xiàn)入棧push和出棧pop過程
java實(shí)現(xiàn)入棧push和出棧pop
什么叫棧
凡是滿足數(shù)據(jù)先進(jìn)后出的一種數(shù)據(jù)結(jié)構(gòu)都叫做棧。
特點(diǎn)
先進(jìn)后出,后進(jìn)先出。
數(shù)據(jù)一般存儲(chǔ)在兩種數(shù)據(jù)結(jié)構(gòu)中:1.數(shù)組、2.鏈表
實(shí)現(xiàn)入棧出??梢杂面湵硪部梢杂脭?shù)組,數(shù)組是最簡(jiǎn)單的一種方法,我們用數(shù)組來實(shí)現(xiàn):
棧的就像杯子一樣,模型如下圖:

那么我們往棧中放數(shù)據(jù)時(shí)入棧(push)就可以跟數(shù)組添加數(shù)據(jù)一樣,假如我們放入數(shù)組順序依次為3,5,7,9,那它在棧中的表現(xiàn)形式如下圖,先進(jìn)入的在棧底,最后進(jìn)入的在棧頂,當(dāng)然我們定義的數(shù)組會(huì)有長(zhǎng)度限制,在到達(dá)棧頂時(shí)我們需要考慮給他擴(kuò)容

那出棧時(shí)我們需要從棧頂開始輸出值的大小,再出棧時(shí)就要輸出棧頂?shù)南乱粋€(gè)值,即9出棧后下一個(gè)出棧的就是7,如下圖:

那我們是需要定義一個(gè)指針index,當(dāng)入棧時(shí)我們讓index在數(shù)組里index++,出棧時(shí),index指向的是棧頂元素上方,所以我們要先輸出棧頂元素就要使index-1,再讓index--;讓下一個(gè)元素成為棧頂,如下圖:




代碼如下
定義一個(gè)棧stack類:
public class Stack {
//定義私有數(shù)組只能本類方法可以訪問
private int[] arr=new int[10];
//定義指針index,來指向棧頂元素上方
private int index;
//入棧方法,通過傳參來添加元素
public void push(int val) {
//考慮擴(kuò)容,如果數(shù)組長(zhǎng)度不夠就先進(jìn)行擴(kuò)充
if(index==arr.length) {
int[] brr=new int[arr.length*2];
for(int i=0;i<arr.length;i++) {
brr[i]=arr[i];
}
arr=brr;
}
//index++是先賦值后加一
arr[index++]=val;
}
//出棧方法
public void pop() {
//考慮到達(dá)棧底時(shí)程序的完整性,防止越界
if(index==0) {
System.out.println("已經(jīng)到達(dá)棧底");
return;
}
//打印出棧頂元素,--index是先減一再賦值
System.out.println(arr[--index]);
}
}通過測(cè)試類來測(cè)試結(jié)果:
public class Test {
public static void main(String[] args) {
Stack stack=new Stack();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
stack.push(5);
stack.push(6);
stack.push(7);
stack.push(8);
stack.pop();
stack.pop();
stack.pop();
stack.pop();
stack.pop();
stack.pop();
stack.pop();
stack.pop();
stack.pop();
}
}結(jié)果如下圖:

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot3整合Mybatis-plus3.5.3報(bào)錯(cuò)問題解決
在日常學(xué)習(xí)springboot3相關(guān)的代碼時(shí),在使用 SpringBoot3 整合 MyBatisplus 時(shí)出現(xiàn)了一些問題,花了不少時(shí)間處理,這篇文章主要介紹了Springboot3整合Mybatis-plus3.5.3報(bào)錯(cuò)問題解決,需要的朋友可以參考下2023-11-11
SpringBoot詳細(xì)探究講解默認(rèn)組件掃描
在項(xiàng)目中我們創(chuàng)建了Controller,這個(gè)Controller是如何被spring自動(dòng)加載的呢?為什么Controller必須放在啟動(dòng)類的同級(jí)目錄下呢2022-06-06
關(guān)于BindingResult的使用總結(jié)及注意事項(xiàng)
這篇文章主要介紹了關(guān)于BindingResult的使用總結(jié)及注意事項(xiàng),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
spring mvc中注解@ModelAttribute的妙用分享
這篇文章主要給大家介紹了關(guān)于spring mvc中注解@ModelAttribute妙用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Android具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。2017-09-09
使用Spring boot + jQuery上傳文件(kotlin)功能實(shí)例詳解
本文通過實(shí)例代碼給大家介紹了使用Spring boot + jQuery上傳文件(kotlin) 功能,需要的朋友可以參考下2017-07-07
Feign如何設(shè)置超時(shí)時(shí)間(不同情況)
本文主要介紹了Feign的超時(shí)時(shí)間設(shè)置,包括單獨(dú)使用Feign和在SpringCloud環(huán)境下的設(shè)置方式,以及與Ribbon和Hystrix的配合使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-11-11

