數組:模擬棧數據結構

題目

編寫程序,使用一維數組,模擬棧數據結構

要求

  • 這個棧可以存儲java中任何引用數據類型的數據
  • 在棧中提供push方法模擬壓棧。 (棧滿,有提示)
  • 在棧中提供pop方法模擬彈棧 (棧空,也有提示)
  • 編寫測試程序,new棧對象,調用push,pop方法來模擬壓棧彈棧的動作
  • 不傳參數時,默認初始化時棧空間容量爲10

思路

public class MyStack {//棧類
    提供一個數組來存儲棧中的元素
        Object[] elements;

    棧幀(永遠指向棧頂部的元素)
    每加1個元素,棧幀+1
    每減1個元素,棧幀-1
        int index;

    構造方法
    構造方法是不是應該給一維數組一個初始化容量

    push方法( push 方法壓棧)
    壓棧表示棧中多一個元素
    但是棧如果已滿,壓棧失敗
    這個方法的參數以及返回值類型自己定義


    pop方法(pop 方法彈棧)
    彈棧表示棧中少一個元素
    但是棧如果已空,彈棧失敗
    這個方法的參數以及返回值類型自己定義

}

編程實現

java

public class MyStack {
    //爲啥選用Object 數組,因爲Object可以存任何引用數據類型的數據
    //提供一個數組來存儲棧中的元素
    private Object[] elements;

    //棧幀(永遠指向棧頂部的元素) 初始化0
    private  int index = 0 ; //如果index採用0,表示棧幀指向了頂部元素的上方
//    private  int index = -1 ; //如果index採用-1,表示棧幀指向了頂部元素

    public MyStack(){
        //默認初始化容量
        this.elements = new Object[10];

    }


    public MyStack(Object[] elements){
        this.elements = elements;

    }


    public void setElements(Object[] elements) {
        this.elements = elements;
    }

    public Object[] getElements() {
        return elements;
    }


    public void setIndex(int index) {
        this.index = index;
    }

    public int getIndex() {
        return index;
    }

    // push方法( push 方法壓棧)
    public void push(Object ele){

        //先判斷棧是否滿了
        if (this.index <this.elements.length){
            //壓棧操作
            // this.elements[this.index] = ele;
            //向棧中加1個元素,棧幀向上移動一個位置
            // this.index++;

            this.elements[this.index++] = ele; //整合方法 index是 index++ 或者++index 取決於 index初始化的值
            System.out.println("棧空間還剩"+(this.elements.length-this.index)+"數據"+ele+",壓棧成功");


        }else {
            System.out.println("棧空間已滿,壓棧失敗");

        }


    }

    // pop方法(pop 方法彈棧)
    public Object pop(){
        //先判斷棧內是否有數據
        if(this.index>0){
            System.out.println("彈出棧內元素:"+this.elements[this.index-1]);
            this.index--;
            System.out.println("棧幀指向:"+this.index);
            return this.elements[this.index];
        }else {
            System.out.println("棧內無元素,彈棧失敗");
            return null;
        }
    }


}
class StackTest{
    public static void main(String[] args) {
        MyStack myStack = new MyStack(new String[8]);
        myStack.push("張三");
        myStack.pop();

        MyStack myStack1 = new MyStack(new Integer[23]);
        myStack1.push(23);
        myStack1.pop();

        MyStack myStack2 = new MyStack(new String[2]);
        myStack2.push("xiaom");
        myStack2.push("xiaohong");
        myStack2.push("xiaogang");
        myStack2.pop();
        myStack2.pop();
        myStack2.pop();


        MyStack myStack3 = new MyStack();
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.push(new Object());
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();
        myStack3.pop();

    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章