摘要:但是數(shù)據(jù)結(jié)構(gòu)知識的需要,數(shù)據(jù)結(jié)構(gòu)中對隊列棧的定義很明確棧,先進后出隊列,先進先出現(xiàn)在要用兩個棧實現(xiàn)一個隊列,那么首先定義一個棧構(gòu)造函數(shù)吧。
其實JS很“流氓的”,JS的數(shù)組完全既可以是隊列也可以是棧。
因為數(shù)組的push,pop就是棧的一組方法嘛。
數(shù)據(jù)的push,shift就是隊列的一組方法嘛。
但是數(shù)據(jù)結(jié)構(gòu)知識的需要,數(shù)據(jù)結(jié)構(gòu)中對隊列、棧的定義很明確:
棧,先進后出
隊列,先進先出
現(xiàn)在要用兩個棧實現(xiàn)一個隊列,那么首先定義一個棧構(gòu)造函數(shù)吧。
定義一個棧Stack構(gòu)造函數(shù)
new兩個Stack,stack1,stack2
stack1實現(xiàn)隊列的進就好了
stack2實現(xiàn)隊列的出就好了
重點來了,進的時候去的是stack1,怎么從stack2出數(shù)據(jù)呢
當(dāng)棧2為空,棧1不為空時,把棧1的數(shù)據(jù)依次pop出去到棧2中,這樣再棧2pop時就是隊列應(yīng)該pop的數(shù)據(jù)了
上代碼:
function Queue(){ var items = []; function Stack() { var item = []; this.push = function (elem) { item.push(elem); return item; }; this.pop = function () { return item.pop(); }; this.isEmpty = function () { return item.length === 0; }; this.get = function () { return item; }; } var stack1 = new Stack(); var stack2 = new Stack(); this.push = function (elem) { stack1.push(elem); return items.push(elem); } this.pop = function () { if(stack1.isEmpty() && stack2.isEmpty()){ throw new Error("空隊列"); } if(stack2.isEmpty() && !stack1.isEmpty()){ while(!stack1.isEmpty()){ stack2.push(stack1.pop()); } return stack2.pop(); } }; this.get = function () { if(!stack2.isEmpty()){ return stack2.get().reverse(); }else{ return items; } } } var queue = new Queue(); queue.push(0); queue.push(1); queue.push(2); queue.get(); queue.pop(); queue.get();
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/82624.html
摘要:基本解決方案按照上述的大體思路,我們給出解決方案入棧和出棧都在中完成,只作為臨時中轉(zhuǎn)空間。入棧入隊出棧除隊尾的元素外將其他所有元素出隊,再入隊中轉(zhuǎn)暫存,然后將中的元素出隊出棧。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本篇介紹的是如何用兩個隊列實現(xiàn)棧的問題。這道題作為上一篇文章算法面試:棧實現(xiàn)隊列的方案的姊...
摘要:解決方案二入隊都在中進行,用于隊列,同時保證所有元素都在一個棧里,且遵循以下約束入隊不管空與否,都將中的所有元素壓入中出隊若中不為空,則直接從中彈出元素若為空,則說明隊列為空,不能出隊。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構(gòu)與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本篇文章介紹一個有趣的問題:用兩個棧實現(xiàn)一個隊列。這道題來自互聯(lián)網(wǎng)公司的算法面試...
摘要:棧底是固定的,而棧頂浮動的如果棧中元素個數(shù)為零則被稱為空棧。入棧將數(shù)據(jù)保存到棧頂。鏈棧鏈棧是指棧的鏈?zhǔn)酱鎯Y(jié)構(gòu),是沒有附加頭節(jié)點的運算受限的單鏈表,棧頂指針是鏈表的頭指針。 一、喜歡單挑線性表 1.線性表的特性 線性表是一個線性結(jié)構(gòu),它是一個含有n≥0個節(jié)點的有限序列。在節(jié)點中,有且僅有一個開始節(jié)點沒有前驅(qū)并有一個后繼節(jié)點,有且僅有一個終端節(jié)點沒有后繼并有一個前驅(qū)節(jié)點。其他的節(jié)點都有且...
摘要:題目編寫一個類,用兩個棧實現(xiàn)隊列,支持隊列的基本操作,,代碼實現(xiàn) 【題目】編寫一個類,用兩個棧實現(xiàn)隊列,支持隊列的基本操作(add,poll,peek) 代碼實現(xiàn) public class TwoStacksQueue { private Stack stackPush; private Stack stackPop; public TwoStacksQue...
摘要:于是翻出了機房里的這本學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法開始學(xué)習(xí)程序員的基礎(chǔ)知識。這本書用了我最熟悉的來實現(xiàn)各種數(shù)據(jù)結(jié)構(gòu)和算法,而且書很薄,可以說是一本不錯的入門教程。隊列在頭部刪除元素,尾部添加元素。 本系列所有文章:第一篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之棧與隊列第二篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之鏈表第三篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之集合第四篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算法之字典和散列表第五篇文章:學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)與算...
閱讀 3214·2021-11-15 18:14
閱讀 1848·2021-09-22 10:51
閱讀 3362·2021-09-09 09:34
閱讀 3580·2021-09-06 15:02
閱讀 1118·2021-09-01 11:40
閱讀 3248·2019-08-30 13:58
閱讀 2580·2019-08-30 11:04
閱讀 1150·2019-08-28 18:31