數據結構:棧

  • 2020 年 4 月 14 日
  • 筆記

棧也是一種線性數據,相比數組棧對應的操作是數組的子集。只能從一端添加,從一端取出,這一端我們稱之為棧頂。

 

 棧是一種後進先出的數據結構。Last In First Out【LIFO】

棧的應用:1.比如Excel、PS的撤銷操作(Undo)能從棧頂獲取最近的操作是什麼。 2:程式調用系統棧的 比如A方法裡面執行B  B方法裡面執行C  C方法裡面執行

 

 當C方法執行完以後,又回到了B方法第二行,當B方法執行完以後又回到了A方法的第二行。

下面是棧的實現方式

import com.dapeng.Array.Array;/**
 * @author gdp
 * @date 2020/3/31 9:39
 */
public class ArrayStack<E> implements Stack<E>{

    Array<E> array ; //成員變數動態數組
    public ArrayStack (int capacity){
        array = new Array<>(capacity);
    }
    public ArrayStack (){
        array = new Array<>();
    }

    @Override
    public int getSize() {
        return array.getSize();
    }

    @Override
    public boolean isEmpty() {
        return array.isEmpty();
    }

    public int  getCapacity(){
        return array.getCapacity();
    }
    @Override
    public void push(E e) { array.addLast(e); }

    @Override
    public E pop() {
        return array.removeLast();
    }

    @Override
    public E peek() {
        return array.getLast();
    }
    @Override
    public String toString(){
        StringBuilder res = new StringBuilder();
        res.append("Stack: ");
        for (int i = 0 ;  i< array.getSize(); i++ )
        {
            res.append(array.get(i));
             if(i!=array.getSize()-1)
                 res.append(",");
        }
        res.append("] top");
        return res.toString();
    }


    public static void main(String[] args) {
        ArrayStack<Integer> arrayStack = new ArrayStack<Integer>();
        for (int i = 0 ; i<5 ; i++ )
        {
            arrayStack.push(i);
            System.out.println(arrayStack);
        }
        arrayStack.pop();
        System.out.println(arrayStack);

    }
}

影片鏈接地址://www.ixigua.com/i6815557175423795715/