LeetCode—225 用队列实现栈 Cpp&Python
使用队列实现栈的下列操作:
push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
一、方法与思路
根据栈(stack)先进后出(First in Last out)和队列(queue)先进先出的特点(First in First out)的特点进行设计。
top() – 获取栈顶元素 即 取队列首的头部
pop() – 移除栈顶元素 即 取队列首的头部并弹出
empty() – 返回栈是否为空 即对队列进行判断
push(x) – 元素 x 入栈 的具体操作
执行push()操作时,将所有元素都加入到queue1中
执行pop()操作时,创建新队列temp_queue,将queue1中的个元素压入queue中,此时temp_queue中的元素实现pop()操作,操作结束后再将temp_queue中的元素重新添加到queue中。
list解法待补充。。
二、C++代码
#include <stdio.h>
#include <queue>
class MyStack {
public:
MyStack() {
}
void push(int x) {
std::queue<int> temp_queue;
temp_queue.push(x);
while(!_data.empty()){
temp_queue.push(_data.front());
_data.pop();
}
while(!temp_queue.empty()){
_data.push(temp_queue.front());
temp_queue.pop();
}
}
int pop() {
int x = _data.front();
_data.pop();
return x;
}
int top() {
return _data.front();
}
bool empty() {
return _data.empty();
}
private:
std::queue<int> _data;
};
int main(){
MyStack S; //测试用例
S.push(1);
S.push(2);
S.push(3);
S.push(4);
printf("%d\n", S.top());
S.pop();
printf("%d\n", S.top());
S.push(5);
printf("%d\n", S.top());
return 0;
}
三、python代码
class MyStack:
def __init__(self):
"""
Initialize your data structure here.
"""
self.queue = []
def push(self, x: int) -> None:
"""
Push element x onto stack.
"""
self.queue.append(x)
def pop(self) -> int:
"""
Removes the element on top of the stack and returns that element.
"""
tmp_queue = []
while len(self.queue) > 1:
tmp_queue.append(self.queue.pop(0))
output = self.queue[0]
self.queue = tmp_queue
return output
def top(self) -> int:
"""
Get the top element.
"""
tmp_queue = []
output = self.queue[0]
while len(self.queue):
tmp_queue.append(self.queue.pop(0))
if len(self.queue) == 1:
output = self.queue[0]
self.queue = tmp_queue
return output
def empty(self) -> bool:
"""
Returns whether the stack is empty.
"""
return len(self.queue) == 0