两个栈实现队列
思路:队列是先进先出,栈是后进先出。stack1用来存储队列进来的元素(进队列),stack2用来表示(出队列),若stack2不为空则可以再出队列,若是为空将stack1中的元素存入stack2中再出队列。
`
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node) {
stack1.push(node);
}
public int pop() {
int num;
if(stack2.size()!=0)
num=stack2.pop();
else{
while (stack1.size()!=0){
stack2.push(stack1.pop());
}
num=stack2.pop();
}
return num;
}
`
两个队列实现栈
思路:队列进出顺序是先进先出,栈的进出的顺序是后进先出。若需要存入5、4、3。这3个元素,队列1、2都开始为空,先存入队列1中,若要实现出栈pop功能,将队列中的元素都出队列最后只留下一个元素,将出队列的元素存入队列2中。
队列1、2会有一个为空,用来存取出队列的元素或进队列的元素。
、
`
public class TwoQueue {
private Queue<Integer> queue1=new LinkedList<>();
private Queue<Integer> queue2=new LinkedList<>();
public static void main(String[] args) {
TwoQueue queue=new TwoQueue();
queue.push(123);
queue.push(111);
queue.push(222);
System.out.println(queue.pop());
}
public void push(Integer num){
if(getQueue1().size()==0&&getQueue2().size()==0){
//如果两个队列中都没有元素则存入队列1中
getQueue1().add(num);
}else if(getQueue1().size()!=0){
//如果队列1中已经有元素了则存入队列1中
getQueue1().add(num);
}else if(getQueue2().size()!=0){
//如果队列2中已经有元素了则存入队列2中
getQueue2().add(num);
}
}
public Integer pop(){
//若没有元素
if(getQueue1().size()==0&&getQueue2().size()==0){
System.out.println("空");
return null;
}else if(getQueue1().size()!=0){
while(getQueue1().size()>1){
Integer temp=getQueue1().poll();
//出队列存入队列2中
getQueue2().add(temp);
}
return getQueue1().poll();
}else {
while(getQueue2().size()>1){
Integer temp=getQueue2().poll();
//出队列存入队列1中
getQueue1().add(temp);
}
return getQueue2().poll();
}
}
public Queue<Integer> getQueue1() {
return queue1;
}
public void setQueue1(Queue<Integer> queue1) {
this.queue1 = queue1;
}
public Queue<Integer> getQueue2() {
return queue2;
}
public void setQueue2(Queue<Integer> queue2) {
this.queue2 = queue2;
}
}
`