力扣对应题目链接:232. 用栈实现队列 - 力扣(LeetCode)
一、《剑指 Offer》内容
二、分析题目
这道题就是在考察对栈和队列的理解,需要我们熟悉栈(先入后出)和队列(先入先出)的特性。详情可见:
【数据结构】栈(Stack)的实现 -- 详解_栈的程序功能及算法实现-CSDN博客
【数据结构】队列(Queue)的实现 -- 详解_队列实现-CSDN博客
栈实现队列的出队操作效率低下:栈底元素(对应队首元素)无法直接删除,需要将上方所有元素出栈。
三、代码
class MyQueue {
public:
stack<int> inStack;
stack<int> outStack;
MyQueue() {}
void push(int x) {
inStack.push(x);
}
int pop() {
if(outStack.empty())
{
if(inStack.empty())
return -1;
while(!inStack.empty())
{
int tmp=inStack.top();
inStack.pop();
outStack.push(tmp);
}
}
int dele=outStack.top();
outStack.pop();
return dele;
}
int peek() {
int res=this->pop();
outStack.push(res);
return res;
}
bool empty() {
return inStack.empty() && outStack.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
四、相关题目(用两个队列实现一个栈)
力扣对于题目链接:225. 用队列实现栈 - 力扣(LeetCode)
1、《剑指 Offer》内容
2、代码
class MyStack {
public:
queue<int> q1;
queue<int> q2;
MyStack() {}
void push(int x) {
q1.push(x);
}
int pop() {
int n=q1.size();
n--;
while(n--)
{
q2.push(q1.front());
q1.pop();
}
int res=q1.front();
q1.pop();
q1 = q2;
while (!q2.empty())
q2.pop();
return res;
}
int top() {
return q1.back();
}
bool empty() {
return q1.empty() && q2.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();
*/