国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

算法---兩個棧實現一個隊列

asoren / 2814人閱讀

摘要:但是數據結構知識的需要,數據結構中對隊列棧的定義很明確棧,先進后出隊列,先進先出現在要用兩個棧實現一個隊列,那么首先定義一個棧構造函數吧。

其實JS很“流氓的”,JS的數組完全既可以是隊列也可以是棧。
因為數組的push,pop就是棧的一組方法嘛。
數據的push,shift就是隊列的一組方法嘛。
但是數據結構知識的需要,數據結構中對隊列、棧的定義很明確:

棧,先進后出

隊列,先進先出

現在要用兩個棧實現一個隊列,那么首先定義一個棧構造函數吧。

定義一個棧Stack構造函數

new兩個Stack,stack1,stack2

stack1實現隊列的進就好了

stack2實現隊列的出就好了
重點來了,進的時候去的是stack1,怎么從stack2出數據呢

當棧2為空,棧1不為空時,把棧1的數據依次pop出去到棧2中,這樣再棧2pop時就是隊列應該pop的數據了

上代碼:

</>復制代碼

  1. function Queue(){
  2. var items = [];
  3. function Stack() {
  4. var item = [];
  5. this.push = function (elem) {
  6. item.push(elem);
  7. return item;
  8. };
  9. this.pop = function () {
  10. return item.pop();
  11. };
  12. this.isEmpty = function () {
  13. return item.length === 0;
  14. };
  15. this.get = function () {
  16. return item;
  17. };
  18. }
  19. var stack1 = new Stack();
  20. var stack2 = new Stack();
  21. this.push = function (elem) {
  22. stack1.push(elem);
  23. return items.push(elem);
  24. }
  25. this.pop = function () {
  26. if(stack1.isEmpty() && stack2.isEmpty()){
  27. throw new Error("空隊列");
  28. }
  29. if(stack2.isEmpty() && !stack1.isEmpty()){
  30. while(!stack1.isEmpty()){
  31. stack2.push(stack1.pop());
  32. }
  33. return stack2.pop();
  34. }
  35. };
  36. this.get = function () {
  37. if(!stack2.isEmpty()){
  38. return stack2.get().reverse();
  39. }else{
  40. return items;
  41. }
  42. }
  43. }
  44. var queue = new Queue();
  45. queue.push(0);
  46. queue.push(1);
  47. queue.push(2);
  48. queue.get();
  49. queue.pop();
  50. queue.get();

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/82624.html

相關文章

  • 算法面試:隊列實現的方案

    摘要:基本解決方案按照上述的大體思路,我們給出解決方案入棧和出棧都在中完成,只作為臨時中轉空間。入棧入隊出棧除隊尾的元素外將其他所有元素出隊,再入隊中轉暫存,然后將中的元素出隊出棧。 聲明:碼字不易,轉載請注明出處,歡迎文章下方討論交流。 前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。本篇介紹的是如何用兩個隊列實現棧的問題。這道題作為上一篇文章算法面試:棧實現隊列的方案的姊...

    dabai 評論0 收藏0
  • 算法面試:實現隊列的方案

    摘要:解決方案二入隊都在中進行,用于隊列,同時保證所有元素都在一個棧里,且遵循以下約束入隊不管空與否,都將中的所有元素壓入中出隊若中不為空,則直接從中彈出元素若為空,則說明隊列為空,不能出隊。 聲明:碼字不易,轉載請注明出處,歡迎文章下方討論交流。 前言:Java數據結構與算法專題會不定時更新,歡迎各位讀者監督。本篇文章介紹一個有趣的問題:用兩個棧實現一個隊列。這道題來自互聯網公司的算法面試...

    韓冰 評論0 收藏0
  • 算法學習之數據結構線性表、堆、

    摘要:棧底是固定的,而棧頂浮動的如果棧中元素個數為零則被稱為空棧。入棧將數據保存到棧頂。鏈棧鏈棧是指棧的鏈式存儲結構,是沒有附加頭節點的運算受限的單鏈表,棧頂指針是鏈表的頭指針。 一、喜歡單挑線性表 1.線性表的特性 線性表是一個線性結構,它是一個含有n≥0個節點的有限序列。在節點中,有且僅有一個開始節點沒有前驅并有一個后繼節點,有且僅有一個終端節點沒有后繼并有一個前驅節點。其他的節點都有且...

    huaixiaoz 評論0 收藏0
  • 【面試算法】由兩個組成的隊列

    摘要:題目編寫一個類,用兩個棧實現隊列,支持隊列的基本操作,,代碼實現 【題目】編寫一個類,用兩個棧實現隊列,支持隊列的基本操作(add,poll,peek) 代碼實現 public class TwoStacksQueue { private Stack stackPush; private Stack stackPop; public TwoStacksQue...

    wenshi11019 評論0 收藏0
  • 學習數據結構與算法隊列

    摘要:于是翻出了機房里的這本學習數據結構與算法開始學習程序員的基礎知識。這本書用了我最熟悉的來實現各種數據結構和算法,而且書很薄,可以說是一本不錯的入門教程。隊列在頭部刪除元素,尾部添加元素。 本系列所有文章:第一篇文章:學習數據結構與算法之棧與隊列第二篇文章:學習數據結構與算法之鏈表第三篇文章:學習數據結構與算法之集合第四篇文章:學習數據結構與算法之字典和散列表第五篇文章:學習數據結構與算...

    pingan8787 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<