精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

隊列實現棧的3種方法,全都擊敗了100%的用戶!

開發 前端
今天我們要講的是「用隊列實現棧」,它們都屬于常見的面試題,而我們今天要用多種方法來實現隊列到棧的“轉變”。

[[349753]]

本文轉載自微信公眾號「Java中文社群」,作者磊哥。轉載本文請聯系Java中文社群公眾號。   

今天我們要講的是「用隊列實現棧」,它們都屬于常見的面試題,而我們今天要用多種方法來實現隊列到棧的“轉變”。

老規矩,先來回顧一下棧(Stack)和隊列(Queue)的特性和常見方法。

棧是后進先出(LIFO)的數據結構,常見方法如下:

  • push():入棧方法,向棧頂添加元素;
  • pop():出棧方法,將棧頂的元素移除并返回元素;
  • peek():查詢棧頂元素,并不會移除元素。

 

隊列是先進先出(FIFO)的數據結構,常見方法如下:

  • offer():入隊方法,向隊尾添加元素;
  • poll():出隊方法,從隊頭移除并返回元素;
  • peek():查詢隊頭元素,并不會移除元素。

知道了這些基礎內容之后,就來看今天的問題吧。

 

題目描述使用隊列實現棧的下列操作:

  • push(x) -- 元素 x 入棧
  • pop() -- 移除棧頂元素
  • top() -- 獲取棧頂元素
  • empty() -- 返回棧是否為空

注意:

  • 你只能使用隊列的基本操作-- 也就是 push to back, peek/pop from front, size, 和 is empty 這些操作是合法的;
  • 你所使用的語言也許不支持隊列。你可以使用 list 或者 deque(雙端隊列)來模擬一個隊列 , 只要是標準的隊列操作即可;
  • 你可以假設所有操作都是有效的(例如, 對一個空的棧不會調用 pop 或者 top 操作)。

LeetCode 225:https://leetcode-cn.com/problems/implement-stack-using-queues/

題目解析

這道題的題目很好理解:只需要將先進先出的隊列,轉換為后進先出的“棧”就可以了,我們可以從多個方向入手來實現此功能,比如使用兩個隊列插入并交換的方式,或者是一個隊列插入再交換的方式,或雙端隊列的方式來實現此功能,具體實現方法和代碼如下。

實現方法 1:兩個隊列實現棧

之前我們用兩個棧實現了一個隊列的文章中,主要使用的是「負負得正」的思想,那么當看到此道題時,首先應該想到的是用兩個隊列來實現一個棧,但這里的實現思路和用棧實現隊列的思路又略有不同,因為隊列都是先進先出的,我們可以把它理解為「正數」,那么也就不能用「負負得正」的思想了,我們這里使用兩個隊列來實現棧,主要的操作思路是先將元素插入一個臨時隊列中,然后再將另一個隊列的所有元素插入到臨時隊列的尾部,從而實現后進先出功能的,具體的實現步驟如下。

步驟一

添加首個元素,入列到臨時隊列 queue2:

 

步驟二

因為正式隊列中無元素,因此無需將 queue1 中的元素移動到臨時隊列 queue2 的尾部,直接將臨時隊列和正式隊列互換即可:

 

步驟三

添加第二個元素,先入列到臨時隊列 queue2:

 

步驟四

再將 queue1 中的元素移動到 queue2 的尾部,如下所示:

 

步驟五

再將 queue1 和 queue2 進行互換:

 

步驟六

執行出隊操作:

 

最終效果

從最終的效果圖我們可以看出,通過兩個隊列已經實現了后進先出的特性,也就是完成了從隊列到棧的轉換,實現代碼如下:

  1. import java.util.Queue; 
  2.  
  3. class MyStack { 
  4.  
  5.     Queue<Integer> queue1; 
  6.     Queue<Integer> queue2; 
  7.  
  8.     public MyStack() { 
  9.         queue1 = new LinkedBlockingQueue(); 
  10.         queue2 = new LinkedBlockingQueue(); 
  11.     } 
  12.  
  13.     /** 
  14.      * 入棧 
  15.      */ 
  16.     public void push(int x) { 
  17.         // 1.入列臨時隊列二 
  18.         queue2.offer(x); 
  19.         // 2.將隊列一的所有元素移動到隊列二 
  20.         while (!queue1.isEmpty()) { 
  21.             queue2.offer(queue1.poll()); 
  22.         } 
  23.         // 3.隊列一和隊列二互換 
  24.         Queue<Integertemp = queue1; 
  25.         queue1 = queue2; 
  26.         queue2 = temp
  27.     } 
  28.  
  29.     /** 
  30.      * 出棧并返回此元素 
  31.      */ 
  32.     public int pop() { 
  33.         return queue1.poll(); 
  34.     } 
  35.  
  36.     /** 
  37.      * 查詢棧頂元素 
  38.      */ 
  39.     public int top() { 
  40.         return queue1.peek(); 
  41.     } 
  42.  
  43.     /** 
  44.      * 判斷是否為空 
  45.      */ 
  46.     public boolean empty() { 
  47.         return queue1.isEmpty(); 
  48.     } 

我們在 LeetCode 中提交以上測試代碼,執行結果如下:

 

此方法很穩,竟然擊敗了 100% 的用戶。

實現方法 2:一個隊列實現棧

那我們可以不可以用一個隊列來實現棧呢?答案是肯定的。

我們只需要執行以下兩個步驟就可以實現將隊列轉換為棧了,具體實現步驟如下:

將元素入列到隊尾;

再將除隊尾之外的所有元素移除并重寫入列。

這樣操作之后,最后進入的隊尾元素反而變成了隊頭元素,也就實現了后進先出的功能了,如下圖所示。

步驟一

元素 1 入列:

 

步驟二

元素 2 入列:

 

步驟三

將最后一個元素之前的所有元素,也就是元素 1,出列重新入列:

 

步驟四

執行出隊操作:

 

最終效果

以上思路的實現代碼如下:

  1. import java.util.Queue; 
  2.  
  3. class MyStack { 
  4.     Queue<Integer> queue1; 
  5.  
  6.     public MyStack() { 
  7.         queue1 = new LinkedBlockingQueue(); 
  8.     } 
  9.  
  10.     /** 
  11.      * 入棧 
  12.      */ 
  13.     public void push(int x) { 
  14.         // 獲取原隊列長度(要移動的次數) 
  15.         int count = queue1.size(); 
  16.         // 將元素放入隊尾 
  17.         queue1.offer(x); 
  18.         // 將除最后一個元素外,其他的元素重新入隊 
  19.         for (int i = 0; i < count; i++) { 
  20.             System.out.println("for"); 
  21.             queue1.offer(queue1.poll()); 
  22.         } 
  23.     } 
  24.  
  25.     /** 
  26.      * 出棧并返回此元素 
  27.      */ 
  28.     public int pop() { 
  29.         return queue1.poll(); 
  30.     } 
  31.  
  32.     /** 
  33.      * 查詢棧頂元素 
  34.      */ 
  35.     public int top() { 
  36.         return queue1.peek(); 
  37.     } 
  38.  
  39.     /** 
  40.      * 判斷是否為空 
  41.      */ 
  42.     public boolean empty() { 
  43.         return queue1.isEmpty(); 
  44.     } 
  45. 我們把以上代碼在 LeetCode  

我們把以上代碼在 LeetCode 中提交,執行結果如下:

 

此方法依舊很穩,也是同樣的擊敗了 100% 的用戶,只不過此方法在內存方面有更好的表現。

實現方法 3:雙端隊列實現棧

如果覺得以上方法比較難的話,最后我們還有一個更簡單的實現方法,我們可以使用 Java 中的雙端隊列 ArrayDeque 來實現將元素可以插入隊頭或隊尾,同樣移除也是,那么這樣我們就可以從隊尾入再從隊尾出,從而就實現了棧的功能了。

雙端隊列結構如下:

 

我們來演示一下用雙端隊列實現棧的具體步驟。

步驟一

元素 1 入隊:

 

步驟二

元素 2 入隊(隊尾):

 

步驟三

再從隊尾出隊:

 

最終效果

以上思路的實現代碼如下:

  1. import java.util.ArrayDeque; 
  2.  
  3. class MyStack { 
  4.     ArrayDeque<Integer> deque; 
  5.  
  6.     public MyStack() { 
  7.         deque = new ArrayDeque<>(); 
  8.     } 
  9.  
  10.     /** 
  11.      * 入棧 
  12.      */ 
  13.     public void push(int x) { 
  14.         deque.offer(x); 
  15.     } 
  16.  
  17.     /** 
  18.      * 出棧并返回此元素 
  19.      */ 
  20.     public int pop() { 
  21.         return deque.pollLast(); 
  22.     } 
  23.  
  24.     /** 
  25.      * 查詢棧頂元素 
  26.      */ 
  27.     public int top() { 
  28.         return empty() ? -1 : deque.peekLast(); 
  29.     } 
  30.  
  31.     /** 
  32.      * 判斷是否為空 
  33.      */ 
  34.     public boolean empty() { 
  35.         return deque.isEmpty(); 
  36.     } 

我們把以上代碼在 LeetCode 中提交,執行結果如下:

 

 

總結

本文我們用 3 種方法實現了將隊列轉換為棧,其中最簡單的方法是用 Java 中自帶的雙端隊列 ArrayDeque 從隊尾入并從隊尾出就實現了棧 ,其他兩個方法使用的是普通隊列,通過入隊之后再移動元素到入隊元素之后的方法,從而實現了棧的功能。

 

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2020-10-21 08:17:11

隊列數據

2018-08-02 09:50:47

Linux命令用戶信息

2021-03-01 23:31:48

隊列實現棧存儲

2020-04-02 10:45:48

多云云計算云平臺

2022-08-11 08:03:43

隊列

2010-05-27 18:18:14

MySQL修改root

2019-04-02 09:53:22

2009-10-29 16:32:24

查看Oracle用戶的

2021-03-21 22:23:38

云計算數據中心IT

2021-07-13 12:31:27

IT組織改進首席技術官

2025-07-01 07:53:47

2009-08-18 13:22:55

C#動態調用Web服務

2019-11-27 08:00:00

Linux系統用戶管理員

2020-06-09 10:09:38

IT預算首席財務官CIO

2018-12-19 19:30:46

JavaScript創建對象前端

2019-09-11 11:09:54

人工智能數據機器學習

2025-03-12 09:54:02

2020-01-21 19:15:23

漏洞安全IT

2024-02-02 08:25:34

隊列與棧Python數據結構

2010-08-02 14:04:29

Flex4教程
點贊
收藏

51CTO技術棧公眾號

亚洲色图视频网站| 日本美女视频一区二区| 亚洲第一男人av| 国产一区二区三区精彩视频| 国产九色在线| 国产很黄免费观看久久| 4444欧美成人kkkk| 国产精品精品软件男同| 国内自拍欧美| 欧美性做爰猛烈叫床潮| 成人短视频在线观看免费| 欧美新色视频| 国产91精品精华液一区二区三区| 欧美一区二区影院| 日韩视频中文字幕在线观看| 亚洲成人一品| 欧美哺乳videos| 一路向西2在线观看| hd国产人妖ts另类视频| 中文字幕中文字幕一区| 精品国产一区二区三| 97超碰中文字幕| 日韩国产在线观看| 91精品国产高清久久久久久91 | 色偷偷9999www| 香港三日本8a三级少妇三级99| 欧美男男gaygay1069| 欧美日韩在线免费| 欧美美女黄色网| 亚洲视频tv| 国产欧美日韩在线看| 精品国产电影| 欧美一区,二区| 丁香一区二区三区| yy111111少妇影院日韩夜片| 国产精品探花视频| 另类人妖一区二区av| 日本中文字幕不卡免费| 色网站在线播放| 欧美性久久久| 欧美国产中文字幕| 全网免费在线播放视频入口| 日韩理论片av| 色播久久人人爽人人爽人人片视av| 亚洲av无码成人精品国产| 久久黄色影视| 亚洲黄色www网站| 日韩Av无码精品| 91麻豆精品国产91久久久久推荐资源| 欧美丰满美乳xxx高潮www| 一级做a免费视频| 青青在线精品| 91精品国产一区二区三区香蕉| 九九九在线观看视频| 欧美日韩亚洲国产| 精品视频在线免费看| 国产视频手机在线播放| 国产欧美在线观看免费| 欧美精品日日鲁夜夜添| 91pony九色| 日韩精品亚洲专区在线观看| 精品少妇一区二区三区在线视频| 国产精品99久久久精品无码| 最新国产一区二区| 亚洲国产精品美女| 99久久久久久久久久| av在线不卡顿| 久久久精品国产网站| 在线观看成人毛片| 亚洲三级毛片| 国产成人涩涩涩视频在线观看| 蜜臀尤物一区二区三区直播| 久热成人在线视频| 亚洲直播在线一区| 色综合免费视频| 国产亚洲女人久久久久毛片| 一区二区三区三区在线| 污污片在线免费视频| 婷婷六月综合亚洲| 超碰网在线观看| av日韩一区| 亚洲国产精品美女| 香蕉久久久久久久| 亚洲国产激情| 国产精品视频白浆免费视频| 国产高清免费av| 久久先锋影音av鲁色资源| 手机成人av在线| bbw在线视频| 欧美三级韩国三级日本三斤| 精品国产一二区| 欧美理论电影大全| 欧美激情精品久久久久久免费印度| 日韩 欧美 综合| 久久99精品久久只有精品| 国产伦精品一区二区三| jizz在线免费观看| 亚洲aⅴ怡春院| 97超碰人人爽| 亚洲涩涩av| 欧美日韩福利电影| 日韩精选在线观看| www.亚洲在线| 特级黄色录像片| 网友自拍亚洲| 精品成人一区二区三区四区| 国产精品综合激情| 中文亚洲免费| 91在线观看网站| av中文字幕在线| 精品成人乱色一区二区| 免费网站在线观看黄| 九一精品国产| 91精品国产777在线观看| 国产日韩欧美视频在线观看| 久久精品免费在线观看| 欧美乱大交xxxxx潮喷l头像| 国产精品一区二区美女视频免费看| 精品视频久久久久久久| 国产一级在线播放| 国产福利91精品一区二区三区| 新呦u视频一区二区| 欧美久久天堂| 亚洲成人网在线| 欧美成人国产精品高潮| 精品午夜久久福利影院| 亚洲高清资源综合久久精品| 欧美magnet| 亚洲精品视频播放| 韩国av免费观看| 成人小视频免费在线观看| 久久福利一区二区| japansex久久高清精品| 日日狠狠久久偷偷四色综合免费 | 婷婷在线精品视频| 久久精品国产亚洲aⅴ| 日韩中文一区二区三区| 色网在线免费观看| 日韩精品福利网站| 日本亚洲欧美在线| 成人av午夜电影| 拔插拔插海外华人免费| a级日韩大片| 欧美激情va永久在线播放| 国产黄色大片网站| 一级做a爱片久久| 亚洲av午夜精品一区二区三区| 亚洲精品国产成人影院| 亚洲bt欧美bt日本bt| 国产调教视频在线观看| 91精品一区二区三区在线观看| 刘亦菲国产毛片bd| 国产一区欧美日韩| 久久久国内精品| 伊人久久影院| 午夜精品在线视频| 色久视频在线播放| 91黄色免费网站| 特黄一区二区三区| 极品少妇xxxx偷拍精品少妇| 日本高清xxxx| 99精品中文字幕在线不卡| 国内精品视频久久| 邻家有女韩剧在线观看国语| 欧美三电影在线| 神马午夜精品91| 福利一区二区在线| 黄色影院一级片| 成人一区而且| 亚洲a区在线视频| 国产精品蜜芽在线观看| 亚洲精品自拍第一页| 中文字幕乱码一区二区| 亚洲日本成人在线观看| 波多野结衣加勒比| 日韩综合小视频| 欧美 国产 精品| 久久狠狠久久| 国产精品自拍小视频| 羞羞视频在线免费国产| 日韩大陆毛片av| 亚洲在线观看av| 亚洲午夜精品久久久久久久久| 波多野结衣a v在线| 极品美女销魂一区二区三区免费| 日韩精品在线视频免费观看| 精品国产一区二区三区久久久蜜臀 | 蜜桃av.com| 成人综合在线观看| 91香蕉视频导航| 国产精品草草| 五月天综合网| 美日韩黄色大片| 成人免费xxxxx在线观看| cao在线视频| 久久影院免费观看| 免费资源在线观看| 欧美成人aa大片| 91超薄丝袜肉丝一区二区| 午夜激情综合网| 久久国产精品国语对白| 久久久精品tv| 国产一卡二卡三卡四卡| 日本成人在线一区| 高清在线观看免费| 综合一区二区三区| 日韩精品久久久毛片一区二区| 99re6热只有精品免费观看| 国产精品一区二区三区成人| 日本蜜桃在线观看视频| 在线成人激情黄色| 欧洲毛片在线| 亚洲二区中文字幕| 国产999久久久| 欧美日韩亚洲国产综合| 天堂网视频在线| 亚洲成av人片在线观看无码| 午夜爽爽爽男女免费观看| 国产色爱av资源综合区| 亚洲国产精品无码久久久久高潮 | 色偷偷久久人人79超碰人人澡| 欧洲猛交xxxx乱大交3| 亚洲欧美在线aaa| 精品国产aaa| 久久综合久久久久88| 91九色蝌蚪porny| 国产精品资源在线| 亚洲第一天堂久久| 精品一区二区三区在线播放| 成人免费xxxxx在线视频| 亚洲一区国产一区| 欧美视频免费看欧美视频| 午夜日韩视频| 国产成人亚洲综合无码| 欧美va天堂| 青青在线视频免费观看| 国产精品99免费看| 国产一级大片免费看| 欧美在线网址| 51xx午夜影福利| 午夜激情一区| 国产成人在线小视频| 欧美/亚洲一区| 亚洲精品天堂成人片av在线播放 | 国产精品一区二区黑人巨大 | 久久人人爽av| 久久爱另类一区二区小说| 男女污污的视频| 蜜桃传媒麻豆第一区在线观看| 久久精品免费网站| 日韩va欧美va亚洲va久久| 国产又黄又猛又粗又爽的视频| 秋霞国产午夜精品免费视频| 日韩av片网站| 国产伦精一区二区三区| 亚洲妇女无套内射精| 成人在线视频一区| 性色av蜜臀av色欲av| 2021国产精品久久精品| a级在线免费观看| 国产精品入口麻豆九色| 1024手机在线视频| 天天色图综合网| 欧美黄色一级大片| 欧美喷水一区二区| www.国产麻豆| 日韩精品久久久久久久玫瑰园| 久久久久久青草| 日韩在线免费视频| 欧美videos另类精品| 18性欧美xxxⅹ性满足| 日韩一级二级| 91在线观看网站| 伊人久久大香线蕉| 一区二区视频在线播放| 亚洲天堂偷拍| 成人小视频在线看| 国内一区二区视频| 亚洲视频在线播放免费| 中文字幕乱码一区二区免费| 久久久久久久久久网站| 欧美日韩国产中文精品字幕自在自线| 国产精品乱码一区二区视频| 欧美一区二区三区在线| 午夜激情小视频| 中文字幕少妇一区二区三区| 少女频道在线观看免费播放电视剧| 91福利视频网| 精品一区二区三区在线观看视频| 激情视频一区二区| 久久久综合色| 亚洲美免无码中文字幕在线 | 日本精品一二三| 国产日韩欧美精品在线| 国产乱国产乱老熟300| 狠狠爱在线视频一区| 一级特黄aa大片| 日韩精品中文在线观看| 高清全集视频免费在线| 国产精彩精品视频| 精品久久ai| 国产欧美自拍视频| 日韩激情视频网站| 岛国精品资源网站| 亚洲天天做日日做天天谢日日欢 | 欧美伦理视频网站| 激情小说 在线视频| 久久久久久国产三级电影| 久久精品资源| 欧美日韩亚洲在线 | 91精品国产高清| 2021年精品国产福利在线| 一区一区视频| 三级不卡在线观看| www.超碰97| 亚洲国产精品久久一线不卡| 国产精品毛片一区视频播| 亚洲一级片在线看| 亚洲插插视频| 精品午夜一区二区三区| 亚洲国产日本| 在线观看一区二区三区视频| 亚洲欧洲精品一区二区三区| 国产成人精品亚洲| 亚洲欧美另类中文字幕| 妞干网免费在线视频| 高清视频一区二区三区| 综合久久婷婷| 久久久久亚洲av片无码v| 亚洲欧美一区二区在线观看| 中文字幕+乱码+中文字幕明步| 亚洲区一区二区| 综合久久2023| 免费h精品视频在线播放| 亚洲美女黄网| 800av在线播放| 午夜精品国产更新| 偷拍自拍在线| 欧美亚洲视频在线看网址| 三级小说欧洲区亚洲区| 日韩欧美国产综合在线| 成人av资源站| 免费在线不卡视频| 精品视频在线播放免| 欧美成人h版| 日韩三级电影| 精品中文字幕一区二区小辣椒| 波多野结衣家庭教师在线观看| 欧美体内she精视频| 在线观看完整版免费| 国产在线一区二区三区| 亚洲精品久久| 老司机av网站| 高跟丝袜欧美一区| 久久久久久久久亚洲精品| 国产不卡视频在线| 日韩一区电影| 毛片毛片毛片毛片毛| 亚洲在线一区二区三区| 四季av日韩精品一区| 日韩美女免费观看| 日韩精品首页| 中文字幕第六页| 午夜精品国产更新| 国产youjizz在线| 亚洲aⅴ男人的天堂在线观看| 伊人久久综合| 日韩成人av一区二区| 在线观看网站黄不卡| 日本a在线播放| 国产精品jizz视频| 久久久国产亚洲精品| 无码人妻精品中文字幕| 欧美变态口味重另类| 3d欧美精品动漫xxxx无尽| 资源网第一页久久久| 成人亚洲一区二区一| 无码aⅴ精品一区二区三区| 日韩日本欧美亚洲| 国产在线播放精品| 天天操天天爽天天射| 亚洲一区二区三区中文字幕| 黄色的视频在线免费观看| 91精品国产自产在线| 99热精品在线观看| 顶级黑人搡bbw搡bbbb搡| 精品国产在天天线2019| yw.尤物在线精品视频| 又大又硬又爽免费视频| 中文字幕不卡在线观看| 蜜臀久久精品久久久久| 国产狼人综合免费视频| 亚洲精华国产欧美| 综合 欧美 亚洲日本| 亚洲高清久久网| 亚洲精品自拍| 99精品视频在线看| 亚洲精品第一国产综合野| 国产人成在线观看| 国产欧美日韩伦理|