簡單的棧結構

/**
 * @Description 實現一個簡單的棧結構,(先進後出)
 * 包括壓棧操作、彈出棧、查找棧頂的數據、判斷棧是否爲空
 * @auther Eleven
 * @create 2020-04-02 23:04
 **/
public class MyStack {
    int[] elements;

    public MyStack() {
        //初始化的時候設置原始數組長度爲0 防止空指針異常
        this.elements = new int[0];
    }

    //壓棧操作
    public void push(int element){
        //創建一個新數組用於接受需要壓入的數據和原先的數組 新數組的長度爲原先數組長度加+1
        int[] newArr=new int[elements.length+1];
        //將原先數組遍歷,並且賦值給到新的數組
        for (int i=0;i<elements.length;i++){
            newArr[i]=elements[i];
        }
        //將需要壓入的數據賦值給到新數組的最後一個索引位置
        newArr[elements.length] =element;
        //將原先數組的指針指向新的數組
        elements = newArr;
    }

    //彈出棧操作(因爲棧是先進後出,所以最先彈出的應該是最後一個索引的數據,彈出棧的數據要被刪除)
    public int pop(){
        //首先需要判斷當前棧中是否有數據
        if(elements.length==0){
            //無數據就拋出異常
            throw new RuntimeException("The Stack is empty");
        }
        //獲取棧頂元素
        int elemet = elements[elements.length-1];
        //創建一個新的數組用於操作數據,將除了最後一個元素之外的其他元素全部放入新的數組中
        int[] newArr = new int[elements.length-1];
        for (int i=0;i<elements.length-1;i++){
            newArr[i] = elements[i];
        }
        //將原先數組的指針指向新的數組
        elements = newArr;
        //返回棧頂元素
        return elemet;
    }

    //查找棧頂數據
    public int peek(){
        //首先需要判斷當前棧中是否有數據
        if(elements.length==0){
            //無數據就拋出異常
            throw new RuntimeException("The Stack is empty");
        }
        //獲取棧頂元素
        int elemet = elements[elements.length-1];
        return elemet;
    }

    //判斷棧是否爲空
    public boolean isEmpty(){
       return elements.length == 0;
    }


}

測試類

class Test{
    public static void main(String[] args) {
      MyStack myStack = new MyStack();
      myStack.push(100);
      myStack.push(98);
      myStack.push(99);

        System.out.println("my Stack :"+ Arrays.toString(myStack.elements));
        myStack.pop();
        myStack.pop();
        myStack.pop();
        System.out.println("my Stack :"+ Arrays.toString(myStack.elements));

        System.out.println("my Stack 的棧頂元素爲 :"+ myStack.peek());
    }
}

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