使用栈Stack实现队列Queue
生活随笔
收集整理的這篇文章主要介紹了
使用栈Stack实现队列Queue
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
如何只使用stack實現queue呢?由于stack是現進后出(FILO),而queue是先進先出的(FIFO)。也就是說stack進行了一次反向,進行兩次反向就能實現queue的功能,所以可以用兩個stack實現queue。
假設兩個棧inStack和outStack,且都為空??梢哉J為onStack提供入隊的功能,棧outStack提供出隊的功能。下面是入隊和出隊的具體算法:
(1)如果棧outStack不為空,直接彈出棧outStack頂部的數據;
(2)如果棧outStack為空,則依次彈出棧inStack的數據,放入棧outStack中,再彈出棧outStack頂部的數據;
實現的代碼: [java]?view plaincopy/**? ?????*?使用兩個棧來模擬隊列? ?????*?? ?????*?@param?<T>? ?????*?? ?????*/?? ????public??class?SimulationQueue<T>?{?? ????????private?Stack<T>?inStack;?? ????????private?Stack<T>?outStack;?? ?? ????????public?SimulationQueue()?{?? ????????????inStack?=?new?Stack<T>();?? ????????????outStack?=?new?Stack<T>();?? ????????}?? ?? ????????/**? ?????????*?入隊? ?????????*?? ?????????*?@param?t? ?????????*/?? ????????public?void?enqueue(T?t)?{?? ????????????inStack.push(t);?? ????????}?? ?? ????????/**? ?????????*?出隊? ?????????*/?? ????????public?T?dequeue()?{?? ????????????T?temp?=?null;?? ????????????if?(!outStack.isEmpty())?{?? ????????????????temp?=?outStack.pop();?? ????????????}?else?{?? ?????????????????? ????????????????while?(!inStack.isEmpty())?{?? ????????????????????temp?=?inStack.pop();?? ????????????????????outStack.push(temp);?? ????????????????}?? ?? ????????????????if?(!outStack.isEmpty())?{?? ????????????????????temp?=?outStack.pop();?? ????????????????}?? ????????????}?? ????????????return?temp;?? ????????}?? ?? ????????/**? ?????????*?隊列是否為空? ?????????*?? ?????????*?@return? ?????????*/?? ????????public?boolean?isEmpty()?{?? ????????????return?inStack.isEmpty()?&&?outStack.isEmpty();?? ????????}?? ?? ????????/**? ?????????*?清空隊列? ?????????*/?? ????????public?void?clear()?{?? ????????????inStack.clear();?? ????????????outStack.clear();?? ????????}?? ????}??
測試代碼:
[java]?view plaincopypublic?static?void?main(String[]?args)?{?? ????????SimulationQueue<String>?queue?=?new?SimulationQueue<String>();?? ????????queue.enqueue("a");?? ????????queue.enqueue("b");?? ????????queue.enqueue("c");?? ????????queue.enqueue("d");?? ????????while(!queue.isEmpty()){?? ????????????System.out.println("當前出隊元素:"+queue.dequeue());?? ????????}?? ????}??
輸出: 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
假設兩個棧inStack和outStack,且都為空??梢哉J為onStack提供入隊的功能,棧outStack提供出隊的功能。下面是入隊和出隊的具體算法:
(1)如果棧outStack不為空,直接彈出棧outStack頂部的數據;
(2)如果棧outStack為空,則依次彈出棧inStack的數據,放入棧outStack中,再彈出棧outStack頂部的數據;
實現的代碼: [java]?view plaincopy
測試代碼:
[java]?view plaincopy
輸出: 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的使用栈Stack实现队列Queue的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 将Python脚本打包成可执行文件
- 下一篇: LRU算法四种实现方式介绍