棧實現java

來源:互聯網
上載者:User

標籤:

  棧是一種“先去後出”的抽象的資料結構。例如:我們在洗盤子的時候,洗完一個盤子,將其放在一摞盤子的最上面,但我們全部洗完後,要是有盤子時,我們會先從最上面的盤子開始使用,這種例子就像棧的資料結構一樣,先放進去的資料,最後才能得到。

      棧不僅在生活中有很多例子,在電腦方面使用的更為頻繁。如:大部分處理器運用基於棧的體繫結構,當調用一個方法時,把他的返回地址和參數壓入棧,當方法結束返回時,那些資料出棧。棧操作就嵌入在微處理器中。還有比如較老的計算機也是這樣,他們不是輸入帶括弧的算術運算式,而是把中間結果先存入棧中等等。

  棧原理圖示:

 棧代碼實現(下面還有分隔字元匹配例子的代碼):

棧類實現:

package com.dxx.stack;public class StackX {    private int maxSize;    private int[] stackArray;    private int top;    //構造器中初始化棧的數組,並將棧定索引置為-1,表示棧為空白。    public StackX(int maxSize) {        super();        this.maxSize = maxSize;        stackArray = new int[maxSize];        top = -1;    }    //判斷棧是否為空白,在出棧操作前都要先判斷棧是否空,若為空白,則不能出棧。    public boolean isEmpty(){        if(top == -1)            return true;        return false;    }    //判斷棧是否已滿,在入棧操作前都要先判斷棧是否已滿,若已滿,則不能入棧。    public boolean isFull(){        if(top == maxSize-1)            return true;        return false;    }    //入棧    public void push(int num){        if(!isFull()){            stackArray[++top] = num;        }else {            System.out.println("棧已滿,不能再進行入棧操作。");        }    }    //出棧    public int pop(){        if(!isEmpty()){            return stackArray[top--];        }else {            System.out.println("棧為空白,不能擷取棧定元素");  return 0;        }    }    //取棧頂元素    public int peek(){        if(!isEmpty()){            return stackArray[top];        }else {            System.out.println("棧為空白,不能擷取棧定元素");    return 0;        }    }}

 

主程式測試:

package com.dxx.stack;public class StackMain {    public static void main(String[] args) {        StackX stackX = new StackX(5);        stackX.peek();        stackX.push(0);        stackX.push(1);        stackX.push(2);        stackX.push(3);        stackX.push(4);        stackX.push(5);        System.out.println(stackX.pop());        System.out.println(stackX.pop());        System.out.println(stackX.pop());    }}

 

輸出結果:

棧為空白,不能擷取棧定元素棧已滿,不能再進行入棧操作。432

 

 

下面就是分隔字元匹配的例子代碼:

分析:

 

分隔字元棧的類:

package com.dxx.stack;public class BracketStackX {    private int maxSize;    private char[] stackArray;    private int top;    //構造器中初始化棧的數組,並將棧定索引置為-1,表示棧為空白。    public BracketStackX(int maxSize) {        super();        this.maxSize = maxSize;        stackArray = new char[maxSize];        top = -1;    }    //判斷棧是否為空白,在出棧操作前都要先判斷棧是否空,若為空白,則不能出棧。    public boolean isEmpty(){        if(top == -1)            return true;        return false;    }    //判斷棧是否已滿,在入棧操作前都要先判斷棧是否已滿,若已滿,則不能入棧。    public boolean isFull(){        if(top == maxSize-1)            return true;        return false;    }    //入棧    public void push(char ch){        if(!isFull()){            stackArray[++top] = ch;        }else {            System.out.println("棧已滿,不能再進行入棧操作。");        }    }    //出棧    public char pop(){        if(!isEmpty()){            return stackArray[top--];        }else {            System.out.println("棧為空白,不能擷取棧定元素");  return 0;        }    }    //取棧頂元素    public char peek(){        if(!isEmpty()){            return stackArray[top];        }else {            System.out.println("棧為空白,不能擷取棧定元素");    return 0;        }    }}

 

字串匹配檢查類:

package com.dxx.stack;//定義一個檢查分隔字元是否匹配的工具列public class BracketCheck {    private String input;    public BracketCheck(String input) {        super();        this.input = input;    }            public boolean chek(){        //先執行個體化有關分隔字元的棧        BracketStackX stackX = new BracketStackX(input.length());        //依次比較input的字元,如果是左分隔字元,就入棧,是右分隔字元,就出棧與右分隔字元匹配。        for(int i=0; i<input.length(); i++){            char ch = input.charAt(i);            switch(ch){            case ‘{‘:            case ‘[‘:            case ‘(‘:                stackX.push(ch);                break;            case ‘)‘:            case ‘]‘:            case ‘}‘:                char ch2 = stackX.pop();                if(ch==‘)‘&&ch2==‘(‘ ||ch==‘]‘&&ch2==‘[‘ ||ch==‘}‘&&ch2==‘{‘){                }else {                    return false;                }                break;            }        }        if(!stackX.isEmpty()){            return false;        }        return true;            }}

 

主程式測試:

package com.dxx.stack;public class StackMain {    public static void main(String[] args) {        BracketCheck bracketCheck = new BracketCheck("123{{[4444(3333)fff]ddddd}");        if(bracketCheck.chek())            System.out.println("匹配");        else             System.out.println("不匹配");    }}

 

結果為:不匹配。

大家有興趣還可以練習一個單子逆序顯示。

 

棧實現java

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.