请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push、top、pop 和 empty)。
实现 MyStack 类:
void push(int x) 将元素 x 压入栈顶。 int pop() 移除并返回栈顶元素。 int top() 返回栈顶元素。 boolean empty() 如果栈是空的,返回 true ;否则,返回 false 。
示例:
输入: ["MyStack", "push", "push", "top", "pop", "empty"] [[], [1], [2], [], [], []] 输出: [null, null, null, 2, 2, false] 解释: MyStack myStack = new MyStack(); myStack.push(1); myStack.push(2); myStack.top(); // 返回 2 myStack.pop(); // 返回 2 myStack.empty(); // 返回 False
代码如下:
//定义两个队列,一个主队列,一个辅队列
class MyStack {
public:queue<int> queue1;queue<int> queue2; MyStack() {}void push(int x) {queue2.push(x);//先将元素入到辅队列里while(!queue1.empty()){queue2.push(queue1.front());//将主队列的队头元素加入辅队列queue1.pop();//再让主队列出队}swap(queue1,queue2);//交换两个队列的值}int pop() {//出栈int n=queue1.front();//获取队头元素queue1.pop();//再让queue1队列出队return n;}int top() {int m=queue1.front();//获取栈顶元素,获取队头元素return m;}bool empty() {return queue1.empty();//让queue1出队,判断queue1是否为空}
};