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

介紹

棧結(jié)構(gòu)是從數(shù)據(jù)的運(yùn)算來(lái)分類的一種數(shù)據(jù)結(jié)構(gòu),它具有特殊的運(yùn)算方式:先進(jìn)后出
而且它的存儲(chǔ)方式可以是順序表,也可以是鏈表(你也可以理解為是被賦予了特定運(yùn)算規(guī)律的數(shù)據(jù)結(jié)構(gòu))

順序棧:使用一組地址連續(xù)的內(nèi)存單元存儲(chǔ)數(shù)據(jù),序號(hào)為0的元素 == 棧底,另外設(shè)置變量top == 棧頂
鏈?zhǔn)綏#菏褂面湵斫Y(jié)構(gòu)來(lái)保存棧的數(shù)據(jù),鏈頭 == 棧底鏈尾 == 棧頂

結(jié)構(gòu)圖

入棧操作.png

出棧操作.png

Java代碼實(shí)現(xiàn)

/**
 * 順序棧結(jié)構(gòu)
 * Created by Sheldon on 2019/4/3.
 * Project Name: alstudy.
 * Package Name: linklist.
 */

// 順序棧結(jié)構(gòu)
public class ArrStack {

    // 棧的最大容量
    static final int MAXLEN=10;
    // 存儲(chǔ)數(shù)據(jù)
    private String datas[] = new String[MAXLEN];
    // 棧頂位置
    private int top = 0;

    /**
     * 入棧
     * @return
     */
    public boolean PushStack(String data){
        // 判斷棧是否滿了
        if(top==MAXLEN){
            System.out.println("棧滿了,請(qǐng)釋放空間");
            return false;
        }else {
            // 數(shù)據(jù)入棧
            datas[top++] = data;
            return true;
        }
    }

    /**
     * 出棧
     * @return
     */
    public String PopStack(){
        // 判斷棧是否為空
        if (top==0){
            System.out.println("棧為空");
            return null;
        }else {
            // 數(shù)據(jù)出棧
            return datas[--top];
        }
    }

    /**
     * 讀取棧頂數(shù)據(jù)
     * @return
     */
    public String PeekStack(){
        // 判斷棧頂是否為空
        if (top==0){
            System.out.println("棧為空");
            return null;
        }else {
            return datas[top-1];
        }
    }

    /**
     * 判斷棧是否為空
     * @return
     */
    public boolean isNull(){
        return top==0 ? true:false;
    }

    /**
     * 判斷棧是否滿了
     * @return
     */
    public boolean isFull(){
        return top==MAXLEN ? true:false;
    }

    /**
     * 獲取棧數(shù)據(jù)的大小
     * @return
     */
    public int size(){
        return top;
    }

    public static void main(String[] args) {
        // 創(chuàng)建棧
        ArrStack stack = new ArrStack();
        // 判斷棧空
        System.out.println(stack.isNull());
        // 入棧
        stack.PushStack("數(shù)據(jù)1");
        // 查看棧頂數(shù)據(jù)
        System.out.println(stack.PeekStack());
        // 再次入棧
        stack.PushStack("數(shù)據(jù)2");
        stack.PushStack("數(shù)據(jù)3");
        // 查看棧頂數(shù)據(jù)
        System.out.println(stack.PeekStack());
        // 出棧
        stack.PopStack();
        // 查看棧頂數(shù)據(jù)
        System.out.println(stack.PeekStack());
        // 查看棧的大小
        System.out.println(stack.size());
    }
}

運(yùn)行結(jié)果


運(yùn)行結(jié)果.png
最后編輯于
?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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