一、分析
棧是限定僅在表的一端進行插入或刪除操作的線性表,對於棧來說,操作端稱為棧頂,另一端則稱為棧底,棧的修改是按照后進先出的原則進行的,因此又稱為后進先出的線性表。
順序棧是指利用順序存儲結構實現的棧,即利用一組地址連續的存儲單元依次存放自棧底到棧頂的數據元素,同時附設指針top指示棧頂元素在順序棧中的位置。
一個標准的順序棧具有如下基本操作:
1、初始化順序棧
2、銷毀順序棧
3、清空順序棧
4、檢測順序棧是否為空
5、返回順序棧中的元素個數
6、返回順序棧的棧頂元素,不修改棧頂指針
7、向順序棧頂中壓入元素
8、從順序棧頂中彈出元素
9、從棧底到棧頂遍歷順序棧
在Java中,可以將整個順序棧定義成一個類,類中定義有一個數組類型的屬性表示順序存儲結構來存儲元素,再定義一個int類型的屬性top來作為指針指示棧頂元素在數組中的位置,順序棧的基本操作則定義成類的方法。初始化順序棧即實例化類,銷毀順序棧即銷毀實例化出來的對象。
二、實現
1、定義類屬性和構造函數
1 class InitStack{ 2 3 private int [] stack = null; //存儲元素 4 5 private int top = 0; //指示棧頂元素在順序棧中的位置 6 7 public InitStack(int max) { //初始化自定義大小的順序棧 8 this.stack = new int[max]; 9 } 10 }
2、清空順序棧
1 public void clearStack() { 2 this.top = 0; //直接令棧頂指針指向棧底即可 3 }
3、檢測順序棧是否為空
1 public boolean stackEmpty() { 2 if(this.top == 0) { //檢測棧頂指針是否指向棧底即可 3 return true; 4 }else { 5 return false; 6 } 7 }
4、返回順序棧中的元素個數
1 public int stackLength() { 2 return this.top; //棧頂指針的值即代表了元素個數 3 }
5、返回順序棧的棧頂元素,不修改棧頂指針
1 public int [] getTop() { 2 3 if (this.top == 0) { //如果順序棧為空,則返回空 4 return null; 5 } 6 7 int [] i = new int[1]; 8 i[0] = stack[this.top - 1]; //獲取棧頂元素 9 10 return i; 11 }
6、向順序棧頂中壓入元素
1 public boolean push(int value) { 2 3 if(this.top == this.stack.length) { //判斷順序棧是否已滿 4 return false; 5 } 6 7 this.stack[this.top] = value; //壓入元素 8 this.top++; //棧頂指針加一 9 return true; 10 }
7、從順序棧頂中彈出元素
1 public int [] pop() { 2 3 if (this.top == 0) { //判斷順序棧是否已空 4 return null; 5 } 6 7 int [] i = new int[1]; 8 this.top--; //棧頂指針減一 9 i[0] = stack[this.top]; //獲取棧頂元素 10 return i; 11 }
8、從棧底到棧頂遍歷順序棧
1 public String stackTraverse() { //通過輸出順序棧元素來表示遍歷 2 3 String s = ""; //存儲要輸出的元素 4 5 for (int i = 0; i < this.top; i++) { //循環遍歷 6 s += this.stack[i] + "、"; 7 } 8 9 if(s.length() == 0) { //如果未獲取到元素,返回空字符串 10 return s; 11 } 12 13 return s.substring(0,s.length() - 1); //除去最后一個頓號后返回 14 }
三、小結
以上就是順序棧用Java的實現,由於只定義了整數的數組,因此只能操作整數數據,但順序棧的基本思想都已實現。