两个栈实现队列和两个队列实现栈

两个栈实现队列

思路:队列是先进先出,栈是后进先出。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;
}
}

`

猜你喜欢

转载自blog.csdn.net/u013164931/article/details/79789722
今日推荐