Two stacks implement queues, two queues implement stacks

Two stacks implement queues

The queue can only delete the head at a time, only add it at the end, the principle of "first in, first out"
Stack "first in, last out"

package queue;

import java.util.Stack;

//用“栈”实现队列
public class QueueTest<T> {
    // 向队列添加数据时:(01) 将“已有的全部数据”都移到mIn中。 (02) 将“新添加的数据”添加到mIn中。
    private Stack<T> mIn = null;
    // 从队列获取元素时:(01) 将“已有的全部数据”都移到mOut中。(02) 返回并删除mOut栈顶元素。
    private Stack<T> mOut = null;

    private int mCount = 0;

    public QueueTest() {
        mIn = new Stack<T>();
        mOut = new Stack<T>();
        mCount = 0;
    }

    private void add(T t) {
        // 将“已有的全部数据”都移到mIn中
        while (!mOut.empty())
            mIn.push(mOut.pop());
        // 将“新添加的数据”添加到mIn中
        mIn.push(t);
        mCount++;
    }

    private T get() {
        // 将“已有的全部数据”都移到mOut中
        while (!mIn.empty())
            mOut.push(mIn.pop());
        mCount--;
        return mOut.pop();
    }

    private boolean isEmpty() {
        return mCount == 0;
    }
    //测试
    public static void main(String[] args) {
        QueueTest list = new QueueTest();
        list.add(10);
        list.add(20);
        list.add(30);

        while(!list.isEmpty()){
            System.out.println(list.get());
        }
    }
}

Two queue implementation stack

package stack;
import java.util.ArrayDeque;
import java.util.Queue;

public class StackTest {
    Queue<Integer> queue1 = new ArrayDeque<>();
    Queue<Integer> queue2 = new ArrayDeque<>();

    public void push(Integer node) {
        // 两个队列都为空时,优先考虑queue1
        queue1.add(node);
    }

    public int pop() {
        // 两个栈都为空时,没有元素可以弹出
        if (queue1.isEmpty() && queue2.isEmpty()) {
            try {
                throw new Exception("stack is empty");
            } catch (Exception e) {
            }
        }
        // 如果queue1为空,queue2有元素, 将queue2的元素依次放入queue1中,直到最后一个元素,我们弹出。
        if (queue1.isEmpty()) {
            while (queue2.size() > 1) {
                queue1.add(queue2.poll());
            }
            return queue2.poll();
        }

        if (queue2.isEmpty()) {
            while (queue1.size() > 1) {
                queue2.add(queue1.poll());
            }
            return queue1.poll();
        }
        return (Integer) null;
    }

    public static void main(String[] args) {
        StackTest s = new StackTest();
        s.push(1);
        s.push(2);
        s.push(3);
        s.push(4);
        System.out.println(s.pop());
        System.out.println(s.pop());
        s.push(5);
        System.out.println(s.pop());
        System.out.println(s.pop());
        System.out.println(s.pop());
    }
}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324800843&siteId=291194637