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

Java 棧和隊列的相互轉(zhuǎn)換詳解

 更新時間:2022年02月14日 11:43:47   作者:Word碼鴨  
棧和隊列,嚴格意義上來說,也屬于線性表,因為它們也都用于存儲邏輯關(guān)系為 "一對一" 的數(shù)據(jù),但由于它們比較特殊,因此將其單獨作為一章,做重點講解

棧和隊列的本質(zhì)是相同的,都只能在線性表的一端進行插入和刪除。因此,棧和隊列可以相互轉(zhuǎn)換。

用棧實現(xiàn)隊列—力扣232題

題目要求:僅使用兩個棧實現(xiàn)先入先出隊列。隊列應(yīng)當(dāng)支持一般隊列支持的所有操作

使用雙棧來實現(xiàn)隊列,我們就可以讓一個棧儲存具體元素,另一個棧做輔助?

上圖可以看到,新元素進棧時,要確保該棧為空。進入棧的元素按順序存到輔助棧中,等新元素進入棧之后,再將輔助棧中的元素按順序出到該棧中。這樣操作之后,棧中元素存放的順序就和隊列的一樣啦

代碼實現(xiàn):

 
//雙棧模擬隊列
public class MyQueue{
    //實際存儲元素的棧
    private Stack<Integer> s1 = new Stack<>();
    //輔助棧
    private Stack<Integer> s2 = new Stack<>();
 
    public MyQueue() {
 
    }
 
    //將元素 x 推到隊列的末尾
    public void push(int x) {
        if (s1.empty()){//棧為空,直接放入x
            s1.push(x);
        }else {
            //此時不為空
            //先把s1所有元素彈出放入s2
            while (!s1.empty()){
                s2.push(s1.pop());//s2放入的值就是s2彈出的值
                //以下兩句和上一句相同
//                int val = s1.pop();
//                s2.push(val);
            }
            //將新元素直接放入s1,此時新元素就處在s1的棧頂
            s1.push(x);
            //再次將s2的所有值依次彈出放入s1
            while (!s2.empty()){
                s1.push(s2.pop());
            }
        }
 
    }
 
    //從隊列的開頭移除并返回元素
    public int pop() {
       return s1.pop();
    }
 
    //返回隊列開頭的元素
    public int peek() {
        return s1.peek();
    }
 
    //判斷隊列是否為空
    public boolean empty() {
        return s1.empty();
    }
}

用隊列實現(xiàn)?!?25題?

題目要求:僅使用兩個隊列實現(xiàn)一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作

1. 雙隊列實現(xiàn)棧

使用雙隊列實現(xiàn)棧, q1是存儲元素的隊列,保證q2添加元素之后永遠為空隊列(新元素直接入q2),保證新元素處在隊首。這樣的話,新元素入隊之后,另外一個隊列的元素依次出隊然后入隊,這樣就實現(xiàn)了一個棧。

代碼實現(xiàn):

public class MyStack {
    //q1是存儲元素的隊列
    private Queue<Integer> q1 = new LinkedList<>();
    //q2是輔助隊列
    //添加元素后保證q2永遠為空
    private Queue<Integer> q2 = new LinkedList<>();
    public MyStack () {
 
    }
 
    //將元素 x 壓入棧頂
    public void push(int x) {
        //新入隊元素直接入q2,成為q2隊首
        q2.offer(x);
        //將q1中的所有元素依次出隊,入q2
        while (!q1.isEmpty()){
            q2.offer(q1.poll());
        }
 
        //q1為空,q2為存儲元素的隊列,互換引用指向
        //互換之后,q1任然是存儲元素的隊列,q2為空
        Queue<Integer> temp = q1;
        q1 = q2;
        q2 = temp;
    }
 
    // 移除并返回棧頂元素
    public int pop() {
        return q1.poll();
    }
 
    //返回棧頂元素
    public int top() {
        return q1.peek();
    }
 
    //判斷棧是否為空
    public boolean empty() {
        return q1.isEmpty();
    }
}
 

2.一個隊列實現(xiàn)棧

先將元素入隊,再將之前的元素依次出隊再入隊即可!也就是說,保證新元素在隊首

代碼實現(xiàn):

public class MyStack {
    private Queue<Integer> queue = new LinkedList<>();
    public MyStack() {
    }
 
    public void push(int x) {
        //記錄之前元素的個數(shù)
        int size = queue.size();
        //將新元素入隊
        queue.offer(x);
        //將之前的元素依次出隊再入隊,新元素就在隊首位置
        for (int i = 0; i < size; i++) {
            queue.offer(queue.poll());
        }
 
    }
 
    public int pop() {
        return queue.poll();
    }
 
    public int top() {
        return queue.peek();
    }
 
    public boolean empty() {
        return queue.isEmpty();
    }
}

這幾個例題實踐目的是更加熟悉的掌握和了解棧和隊列,實際應(yīng)用中是不推薦的哦。

到此這篇關(guān)于Java 棧和隊列的相互轉(zhuǎn)換詳解的文章就介紹到這了,更多相關(guān)Java 棧和隊列 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中從鍵盤輸入多個整數(shù)的方法

    Java中從鍵盤輸入多個整數(shù)的方法

    今天小編就為大家分享一篇Java中從鍵盤輸入多個整數(shù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • Maven下載依賴的順序及配置文件小結(jié)

    Maven下載依賴的順序及配置文件小結(jié)

    本文主要介紹了Maven下載依賴的順序及配置文件小結(jié),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • SpringBoot整合swagger的操作指南

    SpringBoot整合swagger的操作指南

    Swagger 是一個開源的框架,用于設(shè)計、構(gòu)建、文檔化和使用 RESTful 風(fēng)格的 Web 服務(wù),Spring Boot 是一個用于構(gòu)建獨立的、基于生產(chǎn)級別的 Spring 應(yīng)用程序的框架,本文講給大家介紹一下SpringBoot整合swagger的操作指南,需要的朋友可以參考下
    2023-09-09
  • java反射技術(shù)與類使用示例

    java反射技術(shù)與類使用示例

    這篇文章主要介紹了java反射技術(shù)與類使用示例,需要的朋友可以參考下
    2014-04-04
  • Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計算結(jié)果

    Java調(diào)用Python腳本傳遞數(shù)據(jù)并返回計算結(jié)果

    實際工程項目中可能會用到Java和python兩種語言結(jié)合進行,這樣就會涉及到一個問題,Java如何調(diào)用Python腳本,感興趣的可以了解一下
    2021-05-05
  • java?poi導(dǎo)入純數(shù)字等格式問題及解決

    java?poi導(dǎo)入純數(shù)字等格式問題及解決

    這篇文章主要介紹了java?poi導(dǎo)入純數(shù)字等格式問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java swing實現(xiàn)的計算器功能完整實例

    Java swing實現(xiàn)的計算器功能完整實例

    這篇文章主要介紹了Java swing實現(xiàn)的計算器功能,結(jié)合完整實例形式分析了java基于swing組件實現(xiàn)計算器布局與運算功能的具體操作技巧,需要的朋友可以參考下
    2017-12-12
  • 淺談Thread.sleep(0)到底有什么用

    淺談Thread.sleep(0)到底有什么用

    為什么要用sleep,主要是為了暫停當(dāng)前線程,把cpu片段讓出給其他線程,減緩當(dāng)前線程的執(zhí)行,本文主要介紹了Thread.sleep(0)到底有什么用,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • java web項目里ehcache.xml介紹

    java web項目里ehcache.xml介紹

    java web項目里ehcache.xml介紹,需要的朋友可以參考一下
    2013-03-03
  • Java日期時間與正則表達式超詳細整理(適合新手入門)

    Java日期時間與正則表達式超詳細整理(適合新手入門)

    如果使用得當(dāng),正則表達式是匹配各種模式的強大工具,下面這篇文章主要給大家介紹了關(guān)于Java日期時間與正則表達式超詳細整理的相關(guān)資料,本文非常適合新手入門,需要的朋友可以參考下
    2023-04-04

最新評論

鹤岗市| 双峰县| 怀宁县| 开远市| 丹凤县| 义乌市| 北安市| 彩票| 毕节市| 普安县| 宜宾市| 洛南县| 泰安市| 富蕴县| 安阳市| 武山县| 萍乡市| 九龙县| 定安县| 林芝县| 务川| 嘉兴市| 普兰县| 公主岭市| 调兵山市| 巫山县| 佛坪县| 涿州市| 浦江县| 景东| 文水县| 溧水县| 社旗县| 大悟县| 河源市| 库尔勒市| 延安市| 汾西县| 阜新市| 紫金县| 大冶市|