欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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;
    }
}

三:棧的測試

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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • spring啟動(dòng)錯(cuò)誤Singleton bean creation not allowed while the singletons of this factory are indestruction

    spring啟動(dòng)錯(cuò)誤Singleton bean creation not al

    本文主要介紹了spring啟動(dòng)錯(cuò)誤Singleton bean creation not allowed while the singletons of this factory are indestruction,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼

    jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼

    這篇文章主要介紹了jeefast和Mybatis實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的示例代碼,代碼簡單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java 將Word轉(zhuǎn)為HTML的方法

    Java 將Word轉(zhuǎn)為HTML的方法

    本文介紹如何在JAVA程序中將Word文檔通過Document.saveToFile()方法轉(zhuǎn)換為HTML文檔,導(dǎo)入jar的兩種方法,文中給大家詳細(xì)介紹,感興趣的朋友一起看看吧
    2021-10-10
  • Java并發(fā)編程之ThreadLocal詳解

    Java并發(fā)編程之ThreadLocal詳解

    今天給大家?guī)淼氖荍ava并發(fā)編程的相關(guān)知識(shí),文中對(duì)ThreadLocal做了非常詳細(xì)的分析及介紹,對(duì)小伙伴們很有幫助,需要的朋友可以參考下
    2021-06-06
  • Java 和 Kotlin Lambda 表達(dá)式示例詳解

    Java 和 Kotlin Lambda 表達(dá)式示例詳解

    Lambda 表達(dá)式是一種簡潔的函數(shù)表達(dá)方式,可以把函數(shù)作為一個(gè)方法的參數(shù),或者將代碼塊轉(zhuǎn)換為數(shù)據(jù)傳遞,這篇文章主要介紹了Java 和 Kotlin Lambda 表達(dá)式示例詳解,需要的朋友可以參考下
    2024-06-06
  • Java字符串格式化,{}占位符根據(jù)名字替換實(shí)例

    Java字符串格式化,{}占位符根據(jù)名字替換實(shí)例

    這篇文章主要介紹了Java字符串格式化,{}占位符根據(jù)名字替換實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • java實(shí)現(xiàn)單鏈表、雙向鏈表

    java實(shí)現(xiàn)單鏈表、雙向鏈表

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單鏈表、雙向鏈表的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Java使用正則表達(dá)式進(jìn)行匹配且對(duì)匹配結(jié)果逐個(gè)替換

    Java使用正則表達(dá)式進(jìn)行匹配且對(duì)匹配結(jié)果逐個(gè)替換

    這篇文章主要介紹了Java使用正則表達(dá)式進(jìn)行匹配且對(duì)匹配結(jié)果逐個(gè)替換,文章圍繞主題展開詳細(xì)的內(nèi)容戒殺,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 一文了解Spring中攔截器的原理與使用

    一文了解Spring中攔截器的原理與使用

    在web開發(fā)中,攔截器是經(jīng)常用到的功能。它可以幫我們預(yù)先設(shè)置數(shù)據(jù)以及統(tǒng)計(jì)方法的執(zhí)行效率等等。今天就來詳細(xì)的談一下spring中的攔截器,需要的可以參考一下
    2022-06-06
  • Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(58)

    Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(58)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-08-08

最新評(píng)論