【题目】
使用队列实现栈的下列操作:
push(x) – 元素 x 入栈
pop() – 移除栈顶元素
top() – 获取栈顶元素
empty() – 返回栈是否为空
来源:leetcode
链接:https://leetcode-cn.com/problems/implement-stack-using-queues/
【示例】两个队列模拟栈(想看一个队列模拟 直接看方法二)
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗 :6.9 MB, 在所有 C++ 提交中击败了100.00%的用户
class MyStack {
private:
queue<int> q1,q2;
int last=-1;
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
q1.push(x);
last=x;
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int x;
while(!q1.empty()){
if(q1.size()>1)
q2.push(q1.front());
else
x=q1.front();
q1.pop();
}
while(!q2.empty()){
q1.push(q2.front());
q2.pop();
}
return x;
}
/** Get the top element. */
int top() {
int x;
while(!q1.empty()){
q2.push(q1.front());
q1.pop();
}
while(!q2.empty()){
q1.push(q2.front());
x=q2.front();
q2.pop();
}
return x;
}
/** Returns whether the stack is empty. */
bool empty() {
if(q1.size()==0)
return true;
return false;
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
【方法二:一个队列模拟栈】
执行用时 :0 ms, 在所有 C++ 提交中击败了100.00% 的用户
内存消耗 :6.9 MB, 在所有 C++ 提交中击败了100.00%的用户
class MyStack {
private:
queue<int> q;
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
q.push(x);
for(int i=0;i<q.size()-1;i++){
q.push(q.front());
q.pop();
}
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int x=q.front();
q.pop();
return x;
}
/** Get the top element. */
int top() {
return q.front();
}
/** Returns whether the stack is empty. */
bool empty() {
return q.empty();
}
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/