中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中棧的線性結構是什么

發布時間:2021-08-05 14:09:31 來源:億速云 閱讀:142 作者:Leah 欄目:開發技術

這期內容當中小編將會給大家帶來有關Java中棧的線性結構是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

一:棧

棧是限制插入和刪除只能在一個位置上進行的表,此位置就是表的末端,叫作棧頂。

棧的基本操作分為push(入棧) 和 pop(出棧),前者相當于插入元素到表的末端(棧頂),后者相當于刪除棧頂的元素。

Java中棧的線性結構是什么

二:棧的實現

public class LinearStack {
    /**
     * 棧的初始默認大小為10
     */
    private int size = 5;
    /**
     * 指向棧頂的數組下標
     */
    int top = -1;
    /**
     * 定義棧stack
     */
    private int[] stack;
    public LinearStack() {
        stack = new int[size];
    }
    /**
     * 判斷棧滿
     */
    public  boolean isFull() {
        boolean result = false;
        if(top == size - 1) {
            result = true;
        }
        return result;
    }
    /**
     * 入棧操作push
     */
    public  void push(int value) {
        /**
         * 如果棧滿,拓展棧的容量
         */
        if(isFull())
            stack = expansionStack();
        top++;
        stack[top] = value;
    }
    /**
     * 出棧操作
     */
    public  int  pop() {
        if(top == -1)
            throw new RuntimeException("棧空!出棧失敗");
        int result = stack[top] ;
        top--;
        return result;
    }
    /**
     * 擴充容量
     */
    public  int[] expansionStack() {
        size = size + 10;
        int[] stackTemp = new int[size];
        for (int i = 0; i < stack.length; i++) {
            stackTemp[i] = stack[i];
        }
        return stackTemp;
    }
    /**
     * 獲取棧頂的元素
     */
    public int getTop() {
        return stack[top];
    }
    /**
     * 顯示棧中的全部元素
     */
    public  String toString() {
        String str = "[";
        for (int i = 0; i <= top; i++) {
            if(i == top)
                str = str + stack[i] + "]";
            else
                str = str + stack[i] + ",";
        }
        return str;
    }
}

三:棧的測試

public class LinearStackTest {

    public static void main(String[] args) {
        LinearStack linearStack = new LinearStack();
        /**
         * 元素入棧
         */
        linearStack.push(1);
        linearStack.push(2);
        linearStack.push(3);
        linearStack.push(4);
        linearStack.push(5);
        /**
         * 棧滿,顯示棧中所有元素
         */
        System.out.println("0:arrayStack  " + linearStack.toString());
        /**
         * 再次入棧
         */
        linearStack.push(6);
        /**
         * 再次顯示占中的所有元素
         */
        System.out.println("1:arrayStack:  " + linearStack.toString());
        /**
         * 獲取棧頂元素
         */
        System.out.println("獲取棧頂元素:stack[top] = " + linearStack.getTop()+"   top = " + linearStack.top);
        /**
         * 出棧
         */
        System.out.println("出棧:stack[top] = " + linearStack.pop()+"   top = " + linearStack.top);
        /**
         * 再次顯示棧中的元素
         */
        System.out.println("2:arrayStack:  " + linearStack.toString());

    }
}

四:棧的應用(回文序列的判斷)

public class LinearStackChar {
    private int size = 5;
    /**
     * 指向棧頂的數組下標
     */
    int top = -1;
    /**
     * 定義棧stack
     */
    private char[] stack;
    public LinearStackChar() {
        stack = new char[size];
    }
    /**
     * 判斷棧滿
     */
    public  boolean isFull() {
        boolean result = false;
        if(top == size - 1) {
            result = true;
        }
        return result;
    }
    /**
     * 入棧操作push
     */
    public void push(char value) {
        /**
         * 如果棧滿,拓展棧的容量
         */
        if(isFull())
            stack = expansionStack();
        top++;
        stack[top] = value;
    }
    /**
     * 出棧操作
     */
    public  char  pop() {
        if(top == -1)
            throw new RuntimeException("棧空!出棧失敗");
        char result = stack[top] ;
        top--;
        return result;
    }
    /**
     * 擴充容量
     */
    public char[] expansionStack() {
        size = size + 10;
        char[] stackTemp = new char[size];
        for (int i = 0; i < stack.length; i++) {
            stackTemp[i] = stack[i];
        }
        return stackTemp;
    }
    /**
     * 獲取棧頂的元素
     */
    public char getTop() {
        return stack[top];
    }
    /**
     * 顯示棧中的全部元素
     */
    public  String toString() {
        String str = "[";
        for (int i = 0; i <= top; i++) {
            if(i == top)
                str = str + stack[i] + "]";
            else
                str = str + stack[i] + ",";
        }
        return str;
    }
}
public class LinearStackCharTest {

    public static void main(String[] args) {
        /**
         * 判斷一個字符串abcba是不是回文序列?
         * 思路:將字符串切割成為單個字符,存放在字符棧中;
         *      然后出棧,判斷出棧后字符數組組成的字符串是否和原字符串相等;
         *      相等--回文序列
         *      不相等--不是回文序列
         */
        String str = "abcba";
        LinearStackChar linearStackChar = new LinearStackChar();
        //講字符串切割,存放在棧中
        for (int i = 0; i < str.length(); i++) {
            linearStackChar.push(str.charAt(i));
        }
        //存放完成,顯示棧中的元素
        System.out.println("stack = " + linearStackChar.toString());
        //出棧
        String result = "";
        int length = linearStackChar.top;
        System.out.println("top = " + length);

        for (int i = 0; i <= length; i++) {
            result  = result + String.valueOf(linearStackChar.pop());
        }
        //出棧組成的字符串
        System.out.println("result = " + result);
        //判斷是否相等
        System.out.println("result = abcba?    " + (result.equals("abcba") ? true : false));

    }
}

上述就是小編為大家分享的Java中棧的線性結構是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阜康市| 黎城县| 南投县| 金门县| 新安县| 辽阳市| 改则县| 勐海县| 东宁县| 子洲县| 栾川县| 垫江县| 隆德县| 丰镇市| 重庆市| 定兴县| 漳州市| 永州市| 波密县| 璧山县| 墨玉县| 阳曲县| 杭锦旗| 视频| 买车| 库车县| 平远县| 涟水县| 根河市| 雷波县| 安溪县| 时尚| 信宜市| 沧州市| 陕西省| 东海县| 甘洛县| 长海县| 永兴县| 庄浪县| 巴彦县|