java实现-两个栈实现一个队列和两个队列实现一个栈

1.两个栈实现一个队列

  • 思路:压入元素直接入stack1,删除元素先判断stack2中是否为空,若是不为空直接弹出;为空则将stack1中的元素取出压入 stack2中再弹出。
  • 代码:
import java.util.Stack;

public class TwoStackToQueue {
    private Stack stack1 = new Stack();
    private Stack stack2 = new Stack();

    public void add(Integer n){
        stack1.push(n);
    }

    public Integer poll(){
        if(stack1.isEmpty()&&stack2.isEmpty()){
            return null;
        }
        if(stack2.isEmpty()){
            while(!stack1.isEmpty()){
                stack2.push(stack1.pop());
            }
        }
        return (Integer)stack2.pop();
    }

    public boolean isEmpty(){
        if(stack1.isEmpty()&&stack2.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}
复制代码

2.两个队列实现一个栈

  • 思路:要用队列(先进先出)实现栈(先进后出),则是要获取deque1队尾的元素,因此能够把前n-1个元素压入空队列deque2中,弹出deque1剩余的一个队尾元素。
  • 代码:
import java.util.ArrayDeque;
import java.util.Deque;

public class TwoQueueToStack {
    private Deque<Integer> deque1;
    private Deque<Integer> deque2;

    public TwoQueueToStack(){
        deque1 = new ArrayDeque<>();
        deque2 = new ArrayDeque<>();
    }

    public void  push(Integer n){
        if(deque2.isEmpty()){
            deque1.offer(n);
        }else {
            deque2.offer(n);
        }

    }

    public Integer pop(){
        if(deque1.isEmpty()&&deque2.isEmpty()){
            return null;
        }
        if(deque1.isEmpty()&&!deque2.isEmpty()){
            while (deque2.size()>0){
                deque1.add(deque2.poll());
            }
        }
        while (deque1.size()>1){
            deque2.add(deque1.poll());
        }
        return deque1.poll();
    }

    public boolean isEmpty(){
        if(deque1.isEmpty()&&deque2.isEmpty()){
            return true;
        }else{
            return false;
        }
    }
}
复制代码
相关文章
相关标签/搜索