两个栈实现队列的pop和push
import java.util.*;
/**
* 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。
* 思路:入队列,直接用堆栈入就行
* 出队列,当栈2位空的时候,把栈1所有的数据全部pop到栈2;栈2不为空的时候,直接将剩余的pop出去。
*
*/
public class stackqueue {
static Stack stack1 = new Stack();
static Stack stack2 = new Stack();
public void push(int node) {
stack1.push(node);
}
public int pop() {
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
public static void main(String[] args) {
stackqueue sq=new stackqueue();
sq.push(1);
sq.push(2);
sq.push(3);
sq.pop();
sq.push(4);
sq.pop();
sq.pop();
}
}
两个栈实现队列的pop和push
import java.util.*;
/**
* 用两个队列来实现一个栈,完成队列的Push和Pop操作。 队列中的元素为int类型。
* 思路:入队列,当前哪个队列有内容就存入哪个队列
* 出队列,把当前有内容的队列1弹出队尾数据,应该把之前的数据全部push到队列2。
*
*/
public class queueStack {
Queue queue1=new ArrayDeque();
Queue queue2= new ArrayDeque();
public void push(int node){
//最开始插入的时候,优先插到queue1中
if(queue1.isEmpty()&&queue2.isEmpty()){
queue1.offer(node);
}
//哪个有内容插入哪个队列
if(!queue1.isEmpty()&&queue2.isEmpty()){
queue1.offer(node);
}else if(queue1.isEmpty()&&!queue2.isEmpty()){
queue2.offer(node);
}
}
public int pop(){
if(queue1.isEmpty()&&queue2.isEmpty()){
try{
throw new Error("栈是空的!");
}catch(Exception e){
}
}
if(queue2.isEmpty()){
while(queue1.size()>1){
queue2.offer(queue1.poll());
}
return queue1.poll();
}
if(queue1.isEmpty()){
while(queue2.size()>1){
queue1.offer(queue2.poll());
}
return queue2.poll();
}
return (Integer) null;
}
public static void main(String[] args){
queueStack qs = new queueStack();
qs.push(1);
qs.push(2);
System.out.println(qs.pop());
qs.push(3);
qs.push(4);
System.out.println(qs.pop());
System.out.println(qs.pop());
qs.push(5);
System.out.println(qs.pop());
System.out.println(qs.pop());
}
}