棧源碼分析

棧底層實現是一個數組,可以做到先進後出原則。入棧和出棧都操作棧頂元素

package stack.init;

public class MyStack {
    /**
     * 棧最大長度
     */
    private int size;

    /**
     * 棧底層實現 數組
     */
    private int[] arrays;

    /**
     * 臨時變量指向 棧頂元素
     */
    private int top;

    /**
     * 默認初始化
     */
    public MyStack() {
        size = 10;
        arrays = new int[size];
        top = -1;
    }

    /**
     * 自定義初始化
     *
     * @param size
     */
    public MyStack(int size) {
        if (size <= 0) {
            throw new IllegalArgumentException("初始容量不能爲" + size);
        }
        this.size = size;
        arrays = new int[size];
        top = -1;
    }

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

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

    /**
     * 向棧頂插入元素
     *
     * @param value
     */
    public void push(int value) {
        if (isFull()) { // 棧已滿
            // 自動擴容
        } else {
            // 將元素插入棧頂
            top++;
            arrays[top] = value;
        }

    }

    /**
     * 訪問棧頂元素
     *
     * @return
     */
    public int peek() {
        if (top == -1) { // 空棧
            throw new IndexOutOfBoundsException("棧爲空");
        }
        // 獲取棧頂元素
        return arrays[top];
    }

    /**
     * 彈出棧頂元素
     *
     * @return
     */
    public int pop() {
        int size = peek();
        remove(top);
        return size;
    }

    /**
     * 刪除棧頂元素
     *
     * @return
     */
    public void remove(int top) {
        arrays[top] = -1;
        this.top--;
    }
    
}

測試類


import stack.init.MyStack;

import java.util.Stack;

public class Test {

    /**
     * 棧初始化
     */
    public void myStack(){
        // 1. 初始化 自動擴容
        MyStack myStack = new MyStack();
        // 2. 判斷棧是否爲空
        System.out.println("棧是否爲空:" + myStack.isEmpty());
        // 3. 判斷棧是否滿
        System.out.println("棧是否滿:" + myStack.isFull());
        // 4. 向棧中添加元素
        myStack.push(1);
        myStack.push(2);
        myStack.push(3);
        myStack.push(4);
        myStack.push(5);
        myStack.push(6);
        myStack.push(7);
        myStack.push(8);
        myStack.push(9);
        myStack.push(10);
        // 5. 訪問棧頂元素
        System.out.println(myStack.peek());
        System.out.println(myStack.peek());
        // 6. 彈出棧頂元素
        System.out.println(myStack.pop());
        System.out.println(myStack.pop());

    }

    public static void main(String[] args) {
        Test test = new Test();
        test.myStack();
    }
}

測試結果

棧是否爲空:true
棧是否滿:false
10
10
10
9

 

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