java實現(xiàn)入棧push和出棧pop過程
java實現(xiàn)入棧push和出棧pop
什么叫棧
凡是滿足數(shù)據(jù)先進后出的一種數(shù)據(jù)結(jié)構(gòu)都叫做棧。
特點
先進后出,后進先出。
數(shù)據(jù)一般存儲在兩種數(shù)據(jù)結(jié)構(gòu)中:1.數(shù)組、2.鏈表
實現(xiàn)入棧出??梢杂面湵硪部梢杂脭?shù)組,數(shù)組是最簡單的一種方法,我們用數(shù)組來實現(xiàn):
棧的就像杯子一樣,模型如下圖:
那么我們往棧中放數(shù)據(jù)時入棧(push)就可以跟數(shù)組添加數(shù)據(jù)一樣,假如我們放入數(shù)組順序依次為3,5,7,9,那它在棧中的表現(xiàn)形式如下圖,先進入的在棧底,最后進入的在棧頂,當(dāng)然我們定義的數(shù)組會有長度限制,在到達棧頂時我們需要考慮給他擴容
那出棧時我們需要從棧頂開始輸出值的大小,再出棧時就要輸出棧頂?shù)南乱粋€值,即9出棧后下一個出棧的就是7,如下圖:
那我們是需要定義一個指針index,當(dāng)入棧時我們讓index在數(shù)組里index++,出棧時,index指向的是棧頂元素上方,所以我們要先輸出棧頂元素就要使index-1,再讓index--;讓下一個元素成為棧頂,如下圖:
代碼如下
定義一個棧stack類:
public class Stack { //定義私有數(shù)組只能本類方法可以訪問 private int[] arr=new int[10]; //定義指針index,來指向棧頂元素上方 private int index; //入棧方法,通過傳參來添加元素 public void push(int val) { //考慮擴容,如果數(shù)組長度不夠就先進行擴充 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() { //考慮到達棧底時程序的完整性,防止越界 if(index==0) { System.out.println("已經(jīng)到達棧底"); return; } //打印出棧頂元素,--index是先減一再賦值 System.out.println(arr[--index]); } }
通過測試類來測試結(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é)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java深入學(xué)習(xí)圖形用戶界面GUI之事件處理
這篇文章主要介紹了基于Java GUI 事件處理方式,一個圖形界面制作完成了,在程序開發(fā)中只是完成了起步的工作。要想讓一個組件都發(fā)揮自己的作用.就必須對所有的組件進行事件處理2022-05-05教你使用java將excel數(shù)據(jù)導(dǎo)入MySQL
今天教大家如何使用Java將excel數(shù)據(jù)導(dǎo)入MySQL,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴呢很有幫助,需要的朋友可以參考下2021-05-05SpringCloud LoadBalancer自定義負載均衡器使用解析
LoadBalancerClient 是 SpringCloud 提供的一種負載均衡客戶端,Ribbon 負載均衡組件內(nèi)部也是集成了 LoadBalancerClient 來實現(xiàn)負載均衡,本文給大家深入解析 LoadBalancerClient 接口源碼,感興趣的朋友跟隨小編一起看看吧2023-04-04SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn)
本文主要介紹了SpringBoot整合數(shù)據(jù)庫訪問層的實戰(zhàn),主要包含JdbcTemplate和mybatis框架的整合應(yīng)用,具有一定的參考價值,感興趣的可以了解一下2022-03-03