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

教你怎么用Java數(shù)組和鏈表實(shí)現(xiàn)棧

 更新時(shí)間:2021年05月14日 10:56:28   作者:活躍的咸魚(yú)  
本篇文章為大家詳細(xì)介紹了怎么用Java數(shù)組和鏈表實(shí)現(xiàn)棧,文中有非常詳細(xì)的代碼示例及注釋,對(duì)正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下

一、何為棧?

棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱(chēng)為棧頂,相對(duì)地,把另一端稱(chēng)為棧底。向一個(gè)棧插入新元素又稱(chēng)作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素;從一個(gè)棧刪除元素又稱(chēng)作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

棧可以類(lèi)比成現(xiàn)實(shí)生活中的彈夾或者羽毛球桶

二、用數(shù)組實(shí)現(xiàn)棧

用數(shù)組模擬棧的思路分析如圖:

在這里插入圖片描述

1.定義一個(gè)top變量(指針)表示棧頂初始化為-1.
2.定義一個(gè)變量來(lái)記錄棧的大小。
3.入棧操作有數(shù)據(jù)加入到棧中:top++; arr[top]=value;
4.出棧操作: int value=arr[top]; top–; return value;

下面看完整代碼示例:

class Stack{
    public int maxsize;//棧的大小
    public int top=-1;//棧頂
    public int[] arr;

    public Stack(int maxsize) {
        this.maxsize = maxsize;
        arr=new int[maxsize];
    }

    //判斷棧是否為空
    public boolean isEmpty(){
        return top==-1;
    }
    //判斷棧是否滿(mǎn)
    public boolean isFull(){
        return top==maxsize-1;
    }

    //添加一個(gè)元素
    public void push(int value){
        if(isFull()){
            throw new RuntimeException("棧滿(mǎn)");
        }
        top++;
        arr[top]=value;
    }
    //彈出一個(gè)元素
    public int pop(){
        if(isEmpty())
            throw new RuntimeException("棧空");
        int value=arr[top];
        top--;
        return value;
    }
    //遍歷棧中的元素
    public void traverse(){
        if (isEmpty()){
            return;
        }
        //需要從棧頂開(kāi)始顯示數(shù)據(jù)
        for(int i = top; i >= 0 ; i--) {
            System.out.printf("stack[%d]=%d\n", i, arr[i]);
        }
        }
    }

入棧操作 top++;arr[top]=value;其實(shí)可以直接改寫(xiě)為arr[++top]=value;
出棧操作可以將 int value=arr[top]; top–;return value;改為return arr[top–];

三、鏈表實(shí)現(xiàn)棧

思路分析:

入棧操作:用一個(gè)臨時(shí)節(jié)點(diǎn)保存當(dāng)前棧頂節(jié)點(diǎn),將入棧的新節(jié)點(diǎn)作為棧頂元素,并將next域指向原來(lái)的舊節(jié)點(diǎn)。 Node temp=top; top.setNext(temp);

出棧操作:先判斷棧是否為空,不為空則將top節(jié)點(diǎn)的數(shù)據(jù)返回,并將top指向top的下一個(gè)next域:top=top.getNext();

public class LinkedListStack<V> {
      static class Node<V>{
        private V data;
        private Node<V> next;

        public V getData() {
            return data;
        }

        public void setData(V data) {
            this.data = data;
        }

        public Node<V> getNext() {
            return next;
        }

        public void setNext(Node<V> next) {
            this.next = next;
        }
    }
    public int stackSize;//棧內(nèi)元素的個(gè)數(shù)
    public Node<V> top;//棧頂元素

    public LinkedListStack() {
        stackSize = 0;
        top = null;
    }

    //入棧
    public void push(V element){
        Node<V> temp=top;
        top=new Node<>();
        top.setData(element);
        top.setNext(temp);
        stackSize++;
    }
    //出棧
    public V pop(){
        if (isEmpty())
            throw new RuntimeException("empty stack");
        V value=top.getData();
        //棧頂指向下一個(gè)元素
        top=top.getNext();
        stackSize--;
        return value;
    }
    //查看棧頂元素
    public V peek(){
        return top.getData();
    }
    //判斷是否為空
    public boolean isEmpty(){
        return stackSize==0;
    }
    //查看棧內(nèi)元素個(gè)數(shù)
    public int getStackSize(){
        return stackSize;
    }
    }

四、測(cè)試

public class Test {
    public static void main(String[] args) {
        LinkedListStack<String> stack = new LinkedListStack<>();
        stack.push("a");
        stack.push("b");
        stack.push("c");
        System.out.println(stack.pop());
        System.out.println(stack.peek());
        System.out.println(stack.getStackSize());
    }
}
測(cè)試結(jié)果:
c
b
2

到此這篇關(guān)于教你怎么用Java數(shù)組和鏈表實(shí)現(xiàn)棧的文章就介紹到這了,更多相關(guān)Java數(shù)組和鏈表實(shí)現(xiàn)棧內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java 數(shù)據(jù)結(jié)構(gòu)之堆的概念與應(yīng)用

    Java 數(shù)據(jù)結(jié)構(gòu)之堆的概念與應(yīng)用

    堆是一顆完全二叉樹(shù),在這棵樹(shù)中,所有父節(jié)點(diǎn)都滿(mǎn)足大于等于其子節(jié)點(diǎn)的堆叫大根堆,所有父節(jié)點(diǎn)都滿(mǎn)足小于等于其子節(jié)點(diǎn)的堆叫小根堆,堆雖然是一顆樹(shù),但是通常存放在一個(gè)數(shù)組中,父節(jié)點(diǎn)和孩子節(jié)點(diǎn)的父子關(guān)系通過(guò)數(shù)組下標(biāo)來(lái)確定
    2021-10-10
  • 如何給HttpServletRequest增加消息頭

    如何給HttpServletRequest增加消息頭

    這篇文章主要介紹了如何給HttpServletRequest增加消息頭的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java三目運(yùn)算符用法舉例

    Java三目運(yùn)算符用法舉例

    三目運(yùn)算符是我們經(jīng)常在代碼中使用的,這篇文章主要給大家介紹了關(guān)于Java三目運(yùn)算符用法的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • Java中ReUtil正則表達(dá)式工具庫(kù)的使用

    Java中ReUtil正則表達(dá)式工具庫(kù)的使用

    ReUtil是Hutool庫(kù)中的正則表達(dá)式工具類(lèi),提供了多種常用正則表達(dá)式操作方法,下面就來(lái)介紹一下ReUtil的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-02-02
  • 使用Springboot自定義轉(zhuǎn)換器實(shí)現(xiàn)參數(shù)去空格功能

    使用Springboot自定義轉(zhuǎn)換器實(shí)現(xiàn)參數(shù)去空格功能

    這篇文章主要介紹了使用Springboot自定義轉(zhuǎn)換器實(shí)現(xiàn)參數(shù)去空格功能,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • 在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解

    在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解

    這篇文章主要介紹了在Java中實(shí)現(xiàn)可見(jiàn)性(visibility)的主要方法詳解,在Java中,使用關(guān)鍵字volatile和使用鎖(如synchronized關(guān)鍵字或 java.util.concurrent包中的鎖)來(lái)確保對(duì)共享變量的修改在多線程環(huán)境中能夠正確地被其他線程所觀察到,需要的朋友可以參考下
    2023-08-08
  • Intellij無(wú)法創(chuàng)建java文件解決方案

    Intellij無(wú)法創(chuàng)建java文件解決方案

    這篇文章主要介紹了Intellij無(wú)法創(chuàng)建java文件解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Java命名規(guī)則詳細(xì)總結(jié)

    Java命名規(guī)則詳細(xì)總結(jié)

    Class名應(yīng)是首字母大寫(xiě)的名詞。命名時(shí)應(yīng)該使其簡(jiǎn)潔而又具有描述性。異常類(lèi)的命名,應(yīng)以Exception結(jié)尾。Interface的命名規(guī)則與Class相同
    2013-10-10
  • SpringMVC @RequestMapping注解作用詳解

    SpringMVC @RequestMapping注解作用詳解

    通過(guò)@RequestMapping注解可以定義不同的處理器映射規(guī)則,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@RequestMapping注解用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • Spring Boot中如何使用Swagger詳解

    Spring Boot中如何使用Swagger詳解

    Swagger是一個(gè)規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化 RESTful風(fēng)格的Web服務(wù),這篇文章主要給大家介紹了關(guān)于Spring Boot中如何使用Swagger的相關(guān)資料,需要的朋友可以參考下
    2021-08-08

最新評(píng)論

江源县| 巴东县| 遂昌县| 泸西县| 图木舒克市| 扎鲁特旗| 中超| 五台县| 曲沃县| 宁南县| 新邵县| 广安市| 环江| 蒲江县| 安西县| 普陀区| 汉中市| 贺州市| 游戏| 安福县| 宁波市| 仁怀市| 三江| 濮阳县| 琼海市| 怀柔区| 紫阳县| 保康县| 乐陵市| 万宁市| 应城市| 阳原县| 阿瓦提县| 肥西县| 林芝县| 云安县| 台前县| 子洲县| 故城县| 漳州市| 循化|