一、基本概念 棧是一種數(shù)據(jù)結(jié)構(gòu),是只能在某一端插入和刪除的特殊線性表。它按照后進(jìn)先出的原則存儲數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后的數(shù)據(jù)在棧頂,需要讀數(shù)據(jù)的時候從棧頂開始彈出數(shù)據(jù)(最后一個數(shù)據(jù)被第一個讀出來)。
棧是允許在同一端進(jìn)行插入和刪除操作的特殊線性表。允許進(jìn)行插入和刪除操作的一端稱為棧頂(top),另一端為棧底(bottom);棧底固定,而棧頂
浮動;棧中元素個數(shù)為零時稱為空棧。插入一般稱為進(jìn)棧(PUSH),刪除則稱為退棧(POP)。 棧也稱為先進(jìn)后出表。 ??梢杂脕碓诤瘮?shù)調(diào)用的時候存儲斷點(diǎn),做遞歸時要用到棧!
棧的模型
二、基本算法 1、進(jìn)棧(PUSH)算法 ?、偃鬞OP≥n時,則給出溢出信息,作出錯處理(進(jìn)棧前首先檢查棧是否已滿,滿則溢出;不滿則作②); ②置TOP=TOP+1(棧指針加1,指向進(jìn)棧地址); ?、跾(TOP)=X,結(jié)束(X為新進(jìn)棧的元素); 2、退棧(POP)算法 ?、偃鬞OP≤0,則給出下溢信息,作出錯處理(退棧前先檢查是否已為空棧, 空則下溢;不空則作②); ②X=S(TOP),(退棧后的元素賦給X): ③TOP=TOP-1,結(jié)束(棧指針減1,指向棧頂)。 三、棧的實(shí)現(xiàn) 棧分順序棧和鏈?zhǔn)綏?,下面程序介紹了順序棧的實(shí)現(xiàn)。
java棧的實(shí)現(xiàn)
public class MyStack { //定義一個堆棧類 int[] array; //用int數(shù)組來保存數(shù)據(jù),根據(jù)需要可以換類型 int s_size; //定義堆棧的寬度 public MyStack(int i){ //定義一個帶參數(shù)構(gòu)造器 array=new int[i]; //動態(tài)定義數(shù)組的長度 s_size=0; //堆棧的默認(rèn)寬度為0 } public MyStack(){ //默認(rèn)構(gòu)造器 this(50); //默認(rèn)構(gòu)造器可容納50個元素 } public void push(int i){ //壓棧 array[this.s_size]=i; this.s_size++; } public int pop(){ //從堆棧中取元素,從棧頂開始取 if(this.s_size!=0){ int t=array[s_size-1]; //用中間變量保存棧頂?shù)脑?br> array[s_size-1]=0; //取完元素該位置設(shè)為0 s_size--; //棧的大小減1 return t; //返回棧頂元素 }else{ System.out.println("This stack is empty"); //當(dāng)棧為空時顯示提示信息,返回0 return 0; } } public boolean isEmpty(){ //判斷棧是否為空 return this.s_size==0; } public int top(){ |