赞
踩
请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push
、pop
、peek
、empty
):
实现 MyQueue
类:
void push(int x)
将元素 x 推到队列的末尾int pop()
从队列的开头移除并返回元素int peek()
返回队列开头的元素boolean empty()
如果队列为空,返回 true
;否则,返回 false
说明:
push to top
, peek/pop from top
, size
, 和 is empty
操作是合法的。示例 1:
输入: ["MyQueue", "push", "push", "peek", "pop", "empty"] [[], [1], [2], [], [], []] 输出: [null, null, null, 1, 1, false] 解释: MyQueue myQueue = new MyQueue(); myQueue.push(1); // queue is: [1] myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue) myQueue.peek(); // return 1 myQueue.pop(); // return 1, queue is [2] myQueue.empty(); // return false
提示:
1 <= x <= 9
100
次 push
、pop
、peek
和 empty
pop
或者 peek
操作)- class MyQueue {
- public:
- stack<int> stIn;
- stack<int> stOut;
- /** Initialize your data structure here. */
- MyQueue() {
-
- }
- /** Push element x to the back of queue. */
- void push(int x) {
- stIn.push(x);
- }
-
- /** Removes the element from in front of queue and returns that element. */
- int pop() {
- // 只有当stOut为空的时候,再从stIn里导入数据(导入stIn全部数据)
- if (stOut.empty()) {
- // 从stIn导入数据直到stIn为空
- while(!stIn.empty()) {
- stOut.push(stIn.top());
- stIn.pop();
- }
- }
- int result = stOut.top();
- stOut.pop();
- return result;
- }
-
- /** Get the front element. */
- int peek() {
- int res = this->pop(); // 直接使用已有的pop函数
- stOut.push(res); // 因为pop函数弹出了元素res,所以再添加回去
- return res;
- }
-
- /** Returns whether the queue is empty. */
- bool empty() {
- return stIn.empty() && stOut.empty();
- }
- };
请你仅使用两个队列实现一个后入先出(LIFO)的栈,并支持普通栈的全部四种操作(push
、top
、pop
和 empty
)。
实现 MyStack
类:
void push(int x)
将元素 x 压入栈顶。int pop()
移除并返回栈顶元素。int top()
返回栈顶元素。boolean empty()
如果栈是空的,返回 true
;否则,返回 false
。注意:
push to back
、peek/pop from front
、size
和 is empty
这些操作。示例:
输入: ["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
提示:
1 <= x <= 9
100
次 push
、pop
、top
和 empty
pop
和 top
都保证栈不为空- class MyStack {
- public:
- queue<int> que;
- /** Initialize your data structure here. */
- MyStack() {
-
- }
- /** Push element x onto stack. */
- void push(int x) {
- que.push(x);
- }
- /** Removes the element on top of the stack and returns that element. */
- int pop() {
- int size = que.size();
- size--;
- while (size--) { // 将队列头部的元素(除了最后一个元素外) 重新添加到队列尾部
- que.push(que.front());
- que.pop();
- }
- int result = que.front(); // 此时弹出的元素顺序就是栈的顺序了
- que.pop();
- return result;
- }
-
- /** Get the top element. */
- int top() {
- return que.back();
- }
-
- /** Returns whether the stack is empty. */
- bool empty() {
- return que.empty();
- }
- };
欢迎点赞,收藏,评论,你的鼓励就是我创作的最大动力!(๑╹◡╹)ノ"""
版权声明:本文为CSDN博主「渡梦酒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:渡梦酒的博客_CSDN博客-csdn领域博主
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。