日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

漫画:如何用栈实现队列

發布時間:2023/12/3 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 漫画:如何用栈实现队列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自??漫畫:如何用棧實現隊列

棧的特點是先入后出,出入元素都是在同一端(棧頂):

入棧:

出棧:

隊列的特點是先入先出,出入元素是在不同的兩端(隊頭和隊尾):

入隊:

出隊:

既然我們擁有兩個棧,那么我們可以讓其中一個棧作為隊列的入口,負責插入新元素;另一個棧作為隊列的出口,負責移除老元素。

?

?

隊列的主要操作無非有兩個:入隊和出隊。

在模擬入隊操作時,每一個新元素都被壓入到棧A當中。

讓元素1 “入隊”:

讓元素2 “入隊”:

讓元素3 “入隊”:

?

這時候,我們希望最先“入隊”的元素1“出隊”,需要怎么做呢?

讓棧A中的所有元素按順序出棧,再按照出棧順序壓入棧B。這樣一來,元素從棧A彈出并壓入棧B的順序是3,2,1,和當初進入棧A的順序1,2,3是相反的:

此時讓元素1 “出隊”,也就是讓元素1從棧B彈出:

讓元素2 “出隊”:

?

讓元素4 “入隊”:??

?

此時的出隊操作仍然從棧B彈出元素。

讓元素3 “出隊”:

?

讓元素4 “出隊”:

?

?

private Stack<Integer> stackA = new Stack<Integer>(); private Stack<Integer> stackB = new Stack<Integer>();/** * 入隊操作 * @param element ?入隊的元素 */ public void enQueue(int element) {stackA.push(element); }/** * 出隊操作 */ public Integer deQueue() {if(stackB.isEmpty()){if(stackA.isEmpty()){return null;}transfer();}return stackB.pop(); }/** * 棧A元素轉移到棧B */ private void transfer(){while (!stackA.isEmpty()){stackB.push(stackA.pop());} }public static void main(String[] args) throws Exception {StackQueue stackQueue = new StackQueue();stackQueue.enQueue(1);stackQueue.enQueue(2);stackQueue.enQueue(3);System.out.println(stackQueue.deQueue());System.out.println(stackQueue.deQueue());stackQueue.enQueue(4);System.out.println(stackQueue.deQueue());System.out.println(stackQueue.deQueue());}

?

?

?

總結

以上是生活随笔為你收集整理的漫画:如何用栈实现队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。