順序棧———Java實現

概念

棧是一種只允許在一端進行插入或刪除的線性表(邏輯結構屬於操作受限的線性表)。

  • 棧的操作端通常被稱爲棧頂,另一端被稱爲棧底。
  • 棧的插入操作稱爲進棧(壓棧|push);棧刪除操作稱爲出棧(彈棧|pop)。

特點

棧中的元素是“先進後出”的特點,只允許在棧頂操作。

存儲結構

順序存儲的棧稱爲順序棧;鏈式存儲的棧稱爲鏈式棧。

Java實現

圍繞棧的4個元素來實現棧
- 2個狀態:是否棧空;是否棧滿。
- 2個操作:壓棧push;進棧pop。

順序棧的實現

順序棧示意圖:

這裏寫圖片描述

順序棧的Java實現

public class SortStack {

    public Object[] data;   // 數組表示棧內元素
    public int maxSize;     // 棧空間大小
    public int top;         // 棧頂指針(指向棧頂元素)

    /**
     * 初始化棧的長度
     * @param initialSize
     */
    public SortStack(int initialSize){
        if(initialSize>=0){
            this.data=new Object[initialSize];
            this.maxSize=initialSize;
            this.top=-1;
        }
        else{
            System.out.println("棧初始化失敗!");
        }
    }

    /**
     * 判斷棧是否爲空
     * @return
     */
    public boolean isEmpty(){
        return top == -1 ? true : false;
    }

    /**
     * 判斷是否棧滿
     * @return
     */
    public boolean isFull(){
        return top == maxSize-1 ? true : false;
    }

    /**
     * 入棧操作
     * 先判斷是否棧滿
     * @param value
     */
    public void push(Object value){
        if(!isFull()){
            System.out.print(value+"入棧   ");
            data[++top]=value;
        }
        else{
            System.out.println("滿棧,無法進行入棧操作!");
        }
    }

    /**
     * 出棧操作
     * 先判斷是否爲空棧
     * @return
     */
    public Object pop(){
        Object num=null;
        if(!isEmpty()){
            num = data[top--];
            return num;
        }
        else{
            return "空棧,無法進行出棧操作!";
        }

    }

    /**
     * 獲取棧頂元素
     * @return
     */
    public Object getPeek(){
        if(top>=0){
            return data[top];
        }
        else{
            return "棧頂指針爲空,無棧頂元素!";
        }
    }

    /**
     * 打印棧內元素
     */
    public void displayStack(){

        // 棧頂指針不爲—1,棧內有元素,進行打印
        if(top>=0){
            for(int i=top;i>=0;i--){
                System.out.print(data[i] + " ");
            }
            System.out.println();
        }
        else{
            System.out.println("棧內元素爲空!");
        }       
    }

    /**
     * 獲取棧頂指針爲n的棧內元素
     * @param n
     * @return
     */
    public Object getPeekN(int n){
        if(n<top){
            return data[n];
        }
        else{
            return "error";
        }
    }

    public static void main(String[] args) {

        SortStack stack=new SortStack(3);
        System.out.println("棧頂元素爲:"+stack.getPeek());
        System.out.println("棧是否爲空:"+stack.isEmpty());
        System.out.println("是否爲滿棧:"+stack.isFull());

        System.out.println("++++++++");
        stack.push(1);
        stack.push('A');
        stack.push(5);
        stack.push("hello");

        System.out.println("棧是否爲空:"+stack.isEmpty());
        System.out.println("是否爲滿棧:"+stack.isFull());
        System.out.println("棧頂指針爲:"+stack.top);
        System.out.println("==========");

        System.out.println("出棧後的棧頂元素爲:"+stack.pop());
        System.out.println("出棧後的棧頂元素爲:"+stack.pop());
        System.out.println("+++++++++++");


        System.out.println("棧頂元素爲:"+stack.getPeek());
        System.out.println("棧頂指針爲2的元素爲:"+stack.getPeekN(2));
        System.out.println("棧頂指針爲9的元素爲:"+stack.getPeekN(9));
        System.out.println("棧是否爲空:"+stack.isEmpty());
        System.out.println("是否爲滿棧:"+stack.isFull());

        System.out.println("**********");
        System.out.print("棧內元素爲:");
        stack.displayStack();
        System.out.println("棧頂指針爲:"+stack.top);
    }

}

Java代碼運行結果如下:

這裏寫圖片描述

發佈了101 篇原創文章 · 獲贊 139 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章