用队列实现栈
程序员文章站
2022-07-11 08:26:01
...
以前接触过用两个栈实现一个队列,现在又来一个逆问题,用队列实现栈,那么是不是需要使用两个栈,才能实现一个队列呢?
答案不是的,队列有两个口,一进一出。
那么思路就很简单了,用循环队列的思想,就可以通过一个队列实现一个队列。
比如初始入队
1,
在入2
2,1
我们循环一次把1取出来,在重新插入变成
1,2
这是队列内的元素出队排列就符合栈的排列了,如果在插一个呢
3,1,2
循环两次
3,1,2–>2,3,1->1,2,3
思路就出来了,要比用两个栈实现队列要简单许多。
下面贴上代码。
class MyStack {
public:
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
que.push(x);
for(int i=0;i<que.size()-1;i++)//循环插入
{
que.push(que.front());
que.pop();
}
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int num = que.front();
que.pop();
return num;
}
/** Get the top element. */
int top() {
return que.front();
}
/** Returns whether the stack is empty. */
bool empty(){
return que.empty();
}
private: queue<int> que;
};