天天看點

如何使用一個數組實作一個棧結構呢?

下文是筆者采用數組實作棧結構的方法分享,如下所示:

棧結構簡介:

棧是一個先入後出(FILO-FirstInLastOut)的有序清單。

棧(stack)是限制線性表中元素的插入和删除隻能線上性表的同一端進行的一種特殊線性表

允許插入和删除的一端,為變化的一端,稱為棧頂(Top),另一端為固定的一端,稱為棧底(Bottom)。

根據棧的定義可知,最先放入棧中元素在棧底,最後放入的元素在棧頂,

而删除元素剛好相反,最後放入的元素最先删除,最先放入的元素最後删除

實作思路:

      通過記錄棧的最後一個位置的索引,即可實作每次都從最末尾取出元素,實作棧結構的先進後出

package com.java265.algorithm;


/*
 * 作者:java265.com
 * 使用數組實作一個棧結構
 * */
public class ArrayToStack {

    public static void main(String[] args) {

        ArrayStack.add(10);
        ArrayStack.add(20);
        ArrayStack.add(100);
        ArrayStack.add(120);
        ArrayStack.add(110);
        ArrayStack.add(190);
        ArrayStack.add(1);
        ArrayStack.add(2);

        System.out.println("==========");

        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();
        ArrayStack.poll();

    }


}

class ArrayStack {
    // 先進後出

    // 固定棧大小
    static int[] arr = new int[3];

    // endIndex 棧最後一個位置
    static int endIndex = 0;

    static {

    }

    static void add(int a) {
        if (endIndex == arr.length) {
            System.out.println("棧已滿,壓棧失敗!");
            return;
        }

        arr[endIndex++] = a;

    }

    static void poll() {
        if (endIndex == 0) {
            System.out.println("棧為空,出棧失敗!");
            return;
        }

        System.out.println("出棧元素為:" + arr[--endIndex]);
    }

}