- 用两个栈实现队列
stack1作为入列用,stack2用于出列及暂存
/**
* 用两个栈实现一个队列,完成两个函数appendTail和deletedHead,分别是在队列尾部插入节点
* 和在队列头部删除节点的功能
*/
private Stack<String> stack1 = new Stack<String>();
private Stack<String> stack2 = new Stack<String>();
public void appendTail(String s){
stack1.push(s);
}
public String deletedHead() {
if(stack2.isEmpty()){
while(!stack1.isEmpty()){
stack2.push(stack1.pop());
}
}
if(stack2.isEmpty()){
throw new Exception("队列为空,不能删除");
}
return stack2.pop();
}
- 用两个队列实现堆栈
保证queue1和queue2 只有一个有数据
// 用两个队列来实现栈,完成函数pop() push(),即分别弹出栈顶数据和 压入数据
private LinkedList<String> queue1= new LinkedList<String>();
private LinkedList<String> queue2= new LinkedList<String>();
public String pop(){
String re =null;
if(queue1.size() == 0 && queue2.size() == 0){
throw new Exception("没有数据,无法出栈");
}
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;
}
public String push(String str){
if(queue1.size() ==0 && queue2.size() == 0){
queue1.addLast(str);
}else if(queue1.size()!=0){
queue1.addLast(str);
}else if(queue2.size()!=0){
queue2.addLast(str);
}
return str;
}