两个栈实现一个堆
问题描述:
用两个栈实现一个队列;用两个队列实现一个栈。
(堆,队列优先,先进先出。栈,先进后出)
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会怎么样?