【每天学点算法题10.21】用两个队列实现栈

题目描述:使用两个队列实现栈,完成栈的压入和弹出操作。

问题解决:栈的压入元素时,我们直接将数据插入到queue1中,这样最先插入的数据就在队列queue1的头部,最后插入的元素在队里queue1的尾部。现在我们考虑如何从栈中弹出一个元素,根据栈的特点“后进先出”,最后压入栈的元素应该最先弹出。最后插入的数据在queue1的尾部,而对于队列我们只能从头部删除元素,因此我们可以先出queue1中依次删除元素并插入到queue2中,再从queue1中删除最后插入的数据。

java示例代码如下:


import java.util.*;
/**
  @author dyoyo90
  @用两个队列实现栈
  */
public class QueuesImplementStack{
private LinkedList<Integer> queue1;
private LinkedList<Integer> queue2;
QueuesImplementStack(){
queue1=new LinkedList<Integer>();
queue2=new LinkedList<Integer>();
}
//pop one element from the stack
public Integer pop(){
Integer re=null;
if(queue1.size()==0&&queue2.size()==0){
return null;
}
if(queue2.size()==0){
while(queue1.size()>0){
re=queue1.removeFirst();
if(queue1.size()!=0){
queue2.addLast(re);
}
}
}
else if(queue1.size()==0){
while(queue2.size()>0){
re=queue2.removeFirst();
if(queue2.size()!=0){
queue1.addLast(re);
}
}
}
return re;
}
//push one element into the stack
public Integer push(Integer e){
if(queue1.size()==0&&queue2.size()==0){
queue1.addLast(e);//here we can also push the element into queue2
}
if(queue1.size()!=0){
queue1.addLast(e);
}
else if(queue2.size()!=0){
queue2.addLast(e);
}
return e;
}
//a test
public static void main(String[] args){
QueuesImplementStack  stack=new QueuesImplementStack();
List<Integer> re=new ArrayList<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
re.add(stack.pop());
stack.push(4);
re.add(stack.pop());
stack.push(5);
re.add(stack.pop());
re.add(stack.pop());
re.add(stack.pop());
Iterator<Integer> it=re.iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值