用兩個棧實現一個隊列的功能?要求給出算法和思路!
<分析>:
入隊:將元素進棧A
出隊:判斷棧B是否爲空,如果爲空,則將棧A中所有元素pop,並push進棧B,棧B出棧;
如果不爲空,棧B直接出棧。
var inStack = [],
outStack = [];
function push(node) {
// write code here
inStack.push(node);
}
function pop() {
// write code here
if (!outStack.length) {
while (inStack.length) {
outStack.push(inStack.pop());
}
}
return outStack.pop();
}
但是要考慮 pop() 時兩個棧爲空的處理呀。。 js 是默認返回 undefined ,其他靜態語言比如 C++ 我記得會運行時異常吧
用兩個隊列實現一個棧的功能?要求給出算法和思路!
<分析>:
入棧:將元素進隊列A
出棧:判斷隊列A中元素的個數是否爲1,如果等於1,則出隊列,否則將隊列A中的元素 以此出隊列並放入隊列B,直到隊列A中的元素留下一個,然後隊列A出隊列,再把隊列B中的元素出隊列以此放入隊列A中。
var queue1 = [],
queue2 = [];
function push() {
queue1.push();
}
function pop() {
if(!queue2.length){//queue2是空的
while(queue1.length!=1){
queue2.push(queue1.shift());
}
}
//再把隊列2中的元素全部放回1中,倒兩次
while(queue2.length){
queue1.push(queue2.shift());
}
return queue1.shift();
}
queue1 = [1,5,3,7,8];
console.log(pop(),pop(),pop());
注意:(1)判斷當兩個隊列都爲空時,拋出異常,不出隊列
(2)判斷當隊列A爲一個元素時,出隊
(3)再把隊列2中的元素全部放回1中,倒兩次,以便下次輸出元素
參考:https://www.nowcoder.com/questionTerminal/54275ddae22f475981afa2244dd448c6