Java - 數(shù)據(jù)結(jié)構(gòu)-棧

1. 定義

棧(stack),是一種線性存儲(chǔ)結(jié)構(gòu),它有以下幾個(gè)特點(diǎn):

    1. 棧中數(shù)據(jù)是按照"后進(jìn)先出(LIFO, Last In First Out)"方式進(jìn)出棧的。
    1. 向棧中添加/刪除數(shù)據(jù)時(shí),只能從棧頂進(jìn)行操作。

棧通常包括的三種操作:push、peek、pop。

  • push -- 向棧中添加元素。
  • peek -- 返回棧頂元素。
  • pop -- 返回并刪除棧頂元素的操作。

2. 簡(jiǎn)單實(shí)現(xiàn)


public class GeneralArrayStack<T> {

    private static final int DEFAULT_SIZE = 12;
    private T[] mArray;
    private int count;

    public GeneralArrayStack(Class<T> type) {
        this(type, DEFAULT_SIZE);
    }

    public GeneralArrayStack(Class<T> type, int size) {
        // 不能直接使用mArray = new T[DEFAULT_SIZE];
        mArray = (T[]) Array.newInstance(type, size);
        count = 0;
    }

    // 將val添加到棧中
    public void push(T val) {
        mArray[count++] = val;
    }

    // 返回“棧頂元素值”
    public T peek() {
        return mArray[count - 1];
    }

    // 返回“棧頂元素值”,并刪除“棧頂元素”
    public T pop() {
        T ret = mArray[count - 1];
        mArray[count - 1] = null; /* to let gc do its work */
        count--;
        return ret;
    }

    // 返回“棧”的大小
    public int size() {
        return count;
    }

    // 返回“?!笔欠駷榭?    public boolean isEmpty() {
        return size() == 0;
    }

    // 打印“?!?    public void printArrayStack() {
        if (isEmpty()) {
            System.out.printf("stack is Empty\n");
        }

        System.out.printf("stack size()=%d\n", size());

        int i = size() - 1;
        while (i >= 0) {
            System.out.println(mArray[i]);
            i--;
        }
    }
}

測(cè)試:

public static void main(String[] args) {
    GeneralArrayStack<String> stack = new GeneralArrayStack<>(String.class, 5);

    for (int i = 0; i < 5; i++) {
        stack.push("this is " + i);
    }

    System.out.println("棧頂:" + stack.peek());

    String pop = stack.pop();
    System.out.println("取出的棧頂元素:" + pop);

    stack.printArrayStack();
}

結(jié)果:

棧頂:this is 4
取出的棧頂元素:this is 4
stack size()=4
this is 3
this is 2
this is 1
this is 0
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 棧 棧的英文單詞是Stack,它代表一種特殊的線性表,這種線性表只能在固定一端(通常認(rèn)為是線性表的尾端)進(jìn)行插入,...
    Jack921閱讀 1,625評(píng)論 0 5
  • 棧和隊(duì)列的特性 .棧(stacks)是一種只能通過(guò)訪問(wèn)其一端來(lái)實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)與檢索的線性數(shù)據(jù)結(jié)構(gòu),具有后進(jìn)先出(la...
    鋤禾日當(dāng)閱讀 4,904評(píng)論 0 0
  • 棧(Stack) 上一篇我們說(shuō)到了列表,它是一種最自然的數(shù)據(jù)組織方式,如果對(duì)數(shù)據(jù)的存儲(chǔ)順序要求不重要,那么列表就是...
    Cryptic閱讀 16,048評(píng)論 7 15
  • 一、棧 1.1 棧的實(shí)現(xiàn) 棧(Stack)是限制僅在表的一端進(jìn)行插入和刪除運(yùn)算的線性表。java沒(méi)有棧這樣的數(shù)據(jù)結(jié)...
    yjaal閱讀 1,519評(píng)論 0 1
  • 今天,一個(gè)少有的機(jī)會(huì),我和我孩子被邀在一個(gè)餐廳就餐。餐廳在一個(gè)豪華酒店大樓里。就餐之余,孩子的好奇心帶著我看了酒店...
    queenlotus閱讀 295評(píng)論 0 0

友情鏈接更多精彩內(nèi)容