分佈式系統-常用數據結構實現-—隊列與棧

上大學時候 教科書 叫做堆棧,傳達的是一種後入先出的算法思想。但其實我們知道,堆和棧是兩個截然不同的東西。

堆棧其實是數據結果中的兩個概念 ,是存放數據的方式,堆:順序進出 (FIFO);棧:後進先出(Last-In/First-Out)

在Java中,如何實現呢? 需要重點關心棧的特點,根據這個特點來實現: 

先進後出,每次只能操作最上面的數據;

關鍵代碼是對 頭部指針控制

package com.cheri.springallmaster.datastructure;

/**
 * 棧的實現:特點,先進後出,每次只能操作最上面的數據;
 *
 * @author Aaron Du
 * @version V1.0
 * @date 2020/5/10 21:08
 **/
public class StackCustom {

    private long maxsize;
    private long[] StackArr;
    private int top;

    public StackCustom(int size) {

        this.maxsize = size;
        StackArr = new long[size];
        top = -1;
    }

    public void push(long item) {
        StackArr[++top] = item;
    }

    /**
     * 返回並彈出最上面的那個數據
     *
     * @return
     */
    public long pop() {
        return StackArr[top--];
    }

    /**
     * 只能返回,不會彈出數據
     */
    public long peek() {
        return StackArr[top];
    }

    public Boolean isEmpty() {
        return top == -1;
    }

    public Boolean isFull() {
        return top == maxsize - 1;
    }

    public static void main(String[] args) {
        StackCustom stackCustom = new StackCustom(10);
        stackCustom.push(23);
        stackCustom.push(24);
        stackCustom.push(25);
        stackCustom.push(26);
        stackCustom.push(27);
        stackCustom.push(28);
        stackCustom.push(29);
        stackCustom.push(30);
        stackCustom.push(1);
        stackCustom.push(13);


        System.out.println("peek is: "+stackCustom.peek());

        //循環輸出
        while(!stackCustom.isEmpty()){
            System.out.println("pop is: "+stackCustom.pop());

        }
    }
}

我們運行一下,測試截圖如下, 輸出結果:可以看出先插入的後出,後進的先出

 

總結:遇到有LIFO數據存取需求都可以考慮使用這個數據結構來實現。 

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