OceanSide On my own FEET
Fork me on GitHub

LeetCode 225 队列做的栈

请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通队列的全部四种操作(push、top、pop 和 empty)。

实现 MyStack 类:

void push(int x) 将元素 x 压入栈顶。
int pop() 移除并返回栈顶元素。
int top() 返回栈顶元素。
boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/implement-stack-using-queues
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

为巩固假期学习的java,最近开始刷的题都用java写了。

Stack类:栈类  过时    public class Stack<E> extends Vector<E>
Queue:队列类
Deque:双端队列(栈操作建议使用)
 
public class LinkedList<E> 
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
 
 
public interface Deque<E> extends Queue<E>   扩展了java.util.Collection接口
import java.util.ArrayDeque;
import java.util.Queue;

/**
 * leetcode 225 使用队列实现栈
 *
 * Stack类:栈类  过时    public class Stack<E> extends Vector<E>
 * Queue:队列类
 * Deque:双端队列(栈操作建议使用)
 *
 * public class LinkedList<E>
 *     extends AbstractSequentialList<E>
 *     implements List<E>, Deque<E>, Cloneable, java.io.Serializable
 *
 *
 * public interface Deque<E> extends Queue<E>   扩展了java.util.Collection接口
 */

public class MyStack {

    private Queue<Integer> q1;
    private Queue<Integer> q2;

    public MyStack() {
        q1 = new ArrayDeque<>();
        q2 = new ArrayDeque<>();
    }

    // 完成push()操作

    /**
     * 思路:由于队列是先进先出,所以先将元素放入q1,
     * 将q2中已存元素转入q1,再将q1元素倒回q2,就能完成
     * 元素的先进后出
     * @param x 入栈元素
     */
    public void push(int x) {
        if (q2 == null) {
            q2.add(x);
        }
        else {
            q1.add(x);
            while ( ! q2.isEmpty()) {
                q1.add(q2.peek());
                q2.remove();
            }
            while (! q1.isEmpty()) {
                q2.add(q1.peek());
                q1.remove();
            }
        }
    }

    public int pop() {
        return q2.remove();
    }

    public int top() {
        return q2.peek();
    }

    public boolean empty() {
        return q2.isEmpty();
    }

/*    // 测试
    public static void main(String[] args) {
        MyStack myStack = new MyStack();
        myStack.push(1);
        myStack.push(2);
        System.out.println(myStack.pop());
        myStack.push(3);
        System.out.println(myStack.pop());
    }*/

}
posted @ 2021-03-29 17:36  EEthunder  阅读(61)  评论(0)    收藏  举报