最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)詳解

 更新時(shí)間:2021年08月05日 11:01:58   作者:Cbw  
從數(shù)據(jù)結(jié)構(gòu)上看棧和隊(duì)列都是線性表,不過是兩種特殊的線性表,棧只允許在的一端進(jìn)行插人或刪除操作,而隊(duì)列只允許在表的一端進(jìn)行插人操作、而在另一端進(jìn)行刪除操作,這篇文章主要給大家介紹了關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)的相關(guān)資料,需要的朋友可以參考下

一:棧

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

棧的基本操作分為push(入棧) 和 pop(出棧),前者相當(dāng)于插入元素到表的末端(棧頂),后者相當(dāng)于刪除棧頂?shù)脑亍?/p>

二:棧的實(shí)現(xiàn)

public class LinearStack {
    /**
     * 棧的初始默認(rèn)大小為10
     */
    private int size = 5;
    /**
     * 指向棧頂?shù)臄?shù)組下標(biāo)
     */
    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;
    }
    /**
     * 擴(kuò)充容量
     */
    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;
    }
    /**
     * 獲取棧頂?shù)脑?
     */
    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;
    }
}

三:棧的測(cè)試

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());

    }
}

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

public class LinearStackChar {
    private int size = 5;
    /**
     * 指向棧頂?shù)臄?shù)組下標(biāo)
     */
    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;
    }
    /**
     * 擴(kuò)充容量
     */
    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;
    }
    /**
     * 獲取棧頂?shù)脑?
     */
    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) {
        /**
         * 判斷一個(gè)字符串a(chǎn)bcba是不是回文序列?
         * 思路:將字符串切割成為單個(gè)字符,存放在字符棧中;
         *      然后出棧,判斷出棧后字符數(shù)組組成的字符串是否和原字符串相等;
         *      相等--回文序列
         *      不相等--不是回文序列
         */
        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));

    }
}

總結(jié)

到此這篇關(guān)于Java數(shù)據(jù)結(jié)構(gòu)之棧的線性結(jié)構(gòu)的文章就介紹到這了,更多相關(guān)Java棧的線性結(jié)構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring的事件發(fā)布與監(jiān)聽方式案例講解

    Spring的事件發(fā)布與監(jiān)聽方式案例講解

    今天去官網(wǎng)查看spring?boot資料時(shí),在特性中看見了系統(tǒng)的事件及監(jiān)聽章節(jié),所以下面這篇文章主要給大家介紹了關(guān)于SpringBoot事件發(fā)布和監(jiān)聽的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-03-03
  • java遞歸法求字符串逆序

    java遞歸法求字符串逆序

    這篇文章主要介紹了java遞歸法求字符串逆序,涉及java遞歸調(diào)用的相關(guān)操作技巧,需要的朋友可以參考下
    2015-05-05
  • Spring boot使用spring retry重試機(jī)制的方法示例

    Spring boot使用spring retry重試機(jī)制的方法示例

    這篇文章主要介紹了Spring boot使用spring retry重試機(jī)制的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • 利用Java異常機(jī)制實(shí)現(xiàn)模擬借書系統(tǒng)

    利用Java異常機(jī)制實(shí)現(xiàn)模擬借書系統(tǒng)

    這篇文章主要給大家介紹了利用Java異常機(jī)制實(shí)現(xiàn)模擬借書系統(tǒng)的相關(guān)資料,文中先對(duì)java異常機(jī)制進(jìn)行了簡(jiǎn)單介紹,而后通過示例代碼介紹了java語言是如何實(shí)現(xiàn)一個(gè)控制臺(tái)版的模擬借書系統(tǒng),需要的朋友可以參考學(xué)習(xí),一起來看看吧。
    2017-04-04
  • java之Thread不捕獲異常默認(rèn)處理邏輯

    java之Thread不捕獲異常默認(rèn)處理邏輯

    這篇文章主要介紹了java之Thread不捕獲異常默認(rèn)處理邏輯,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Springboot 整合 Java DL4J 實(shí)現(xiàn)時(shí)尚穿搭推薦系統(tǒng)(實(shí)例代碼)

    Springboot 整合 Java DL4J 實(shí)現(xiàn)時(shí)尚穿搭推薦系統(tǒng)(實(shí)例代碼)

    本文介紹了如何使用SpringBoot和JavaDeeplearning4j框架搭建一個(gè)時(shí)尚穿搭推薦系統(tǒng),文章詳細(xì)闡述了系統(tǒng)的技術(shù)架構(gòu)、數(shù)據(jù)集格式、Maven依賴配置、模型訓(xùn)練和預(yù)測(cè)代碼實(shí)現(xiàn),以及單元測(cè)試和預(yù)期輸出結(jié)果
    2024-10-10
  • Java多線程中的CountDownLatch詳細(xì)解讀

    Java多線程中的CountDownLatch詳細(xì)解讀

    這篇文章主要介紹了Java多線程中的CountDownLatch詳細(xì)解讀,一個(gè)同步輔助類,在完成一組正在其他線程中執(zhí)行的操作之前,它允許一個(gè)或多個(gè)線程一直等待,用給定的計(jì)數(shù) 初始化 CountDownLatch,需要的朋友可以參考下
    2023-11-11
  • 如何用Java將數(shù)據(jù)庫(kù)的數(shù)據(jù)生成pdf返回給前端用戶下載

    如何用Java將數(shù)據(jù)庫(kù)的數(shù)據(jù)生成pdf返回給前端用戶下載

    本文詳細(xì)介紹了使用SpringBoot、iText庫(kù)、MyBatis等技術(shù)從數(shù)據(jù)庫(kù)中選取數(shù)據(jù)并生成PDF文件的后端處理流程,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • Java中弱引用和軟引用的區(qū)別以及虛引用和強(qiáng)引用介紹

    Java中弱引用和軟引用的區(qū)別以及虛引用和強(qiáng)引用介紹

    很早Java API就添加了弱引用(WeakReference)和軟引用(SoftReference),但并不是所有的程序員都熟悉這兩個(gè)概念
    2014-04-04
  • MyBatis逆向工程基本操作及代碼實(shí)例

    MyBatis逆向工程基本操作及代碼實(shí)例

    這篇文章主要介紹了MyBatis逆向工程基本操作及代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07

最新評(píng)論

宁陕县| 昌乐县| 盐源县| 湖口县| 盐山县| 乐安县| 南和县| 南城县| 新田县| 镇巴县| 嘉荫县| 班戈县| 玉树县| 饶河县| 西乌珠穆沁旗| 元江| 大石桥市| 丰都县| 敖汉旗| 乌兰察布市| 丹棱县| 泸水县| 金阳县| 苍梧县| 东莞市| 延安市| 嘉义县| 华亭县| 开阳县| 乐安县| 根河市| 改则县| 安顺市| 泰和县| 乌审旗| 崇左市| 虎林市| 三亚市| 历史| 洛阳市| 西和县|