Java實現順序棧


一、分析

  棧是限定僅在表的一端進行插入或刪除操作的線性表,對於棧來說,操作端稱為棧頂,另一端則稱為棧底,棧的修改是按照后進先出的原則進行的,因此又稱為后進先出的線性表。

  順序棧是指利用順序存儲結構實現的棧,即利用一組地址連續的存儲單元依次存放自棧底到棧頂的數據元素,同時附設指針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的實現,由於只定義了整數的數組,因此只能操作整數數據,但順序棧的基本思想都已實現。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM