问题描述:
用两个栈实现一个队列;用两个队列实现一个栈。
(堆,队列优先,先进先出。栈,先进后出)
https://www.cnblogs.com/tracyhan/p/5490775.html
用两个栈实现一个队列
思路:队列添加数据时,进入栈1;从队列取出元素时,如果栈2中有数据,直接从栈2出栈,如果栈2为空,先把栈1中的数据全部倒入到栈2,然后从栈2出栈。
类似于卖烧饼,一个栈相当于柜台,一个栈相当于笸箩,新出炉的烧饼先放到笸箩里,有人来买烧饼了,从柜台取,如果柜台的烧饼卖完了,就把笸箩里的烧饼全部倒到柜台里。
代码如下:
function Queue(){ var stack1 = []; var stack2 = []; this.push = function(data){ stack1.push(data); } this.pop = function(){ if(stack2.length == 0){ for(var i = stack1.length; i > 0; i--){ stack2.push(stack1.pop()); } } return stack2.pop(); } }
用两个队列实现一个栈
代码如下:
function Stack(){ var queue1 = new Queue(); var queue2 = new Queue(); var n = 0; this.push = function(data){ queue1.push(data); n++; } this.pop = function(){ var size = queue1.size(); for(var i = size - 1; i > 0; i--){ queue2.push(queue1.pop()); queue1.push(queue2.pop()); } if(n > 0){ n--; } return queue1.pop(); } this.size = function(){ return n; } } function Queue(){ var stack1 = []; var stack2 = []; var n = 0; this.push = function(data){ stack1.push(data); n++; } this.pop = function(){ if(stack2.length == 0){ for(var i = stack1.length; i > 0; i--){ stack2.push(stack1.pop()); } } if(n > 0){ n--; } return stack2.pop(); } this.size = function(){ return n; } }
https://github.com/hanyeah/lianxi/tree/master/两个栈实现一个堆
如果把上面代码中,Queue中的数组换成Stack会怎么样?
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。