数据结构模拟-用栈实现队列
用栈实现队列的基本操作,包括pop(), push(), empty(), peek().
可以用两个栈来实现,一个栈保存入队的一端,也就是队尾,一个栈保存出队的一端,也就是队首。当遇到出队pop()时,如果stack out不为空,直接出栈,如果为空,那么先将stack in栈中所有的元素移动到stack out中,由于两个栈先进后出的特性,相当于负负得正,正好将stack in栈中想反的先后顺序更正了过来。
232. 用栈实现队列 - 力扣(LeetCode)
参考代码如下:
class MyQueue {
private:
stack<int> inSt;//队尾,入队
stack<int> outSt;//队首,出队
public:
MyQueue() {}
void push(int x) { inSt.push(x); }//入队,加入stack in栈中
int pop() {//出队,按照上述的逻辑过程
if(outSt.empty()){
while (!inSt.empty()) {
outSt.push(inSt.top());
inSt.pop();
}
}
int res = outSt.top();
outSt.pop();
return res;
}
int peek() {//返回队首元素,复用pop()
int res = this->pop();
outSt.push(res);
return res;
}
bool empty() {//两个栈都为空,说明队列为空
return inSt.empty() && outSt.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();
*/