思路1:
使用两个队列实现
queue1 -> 4
queue2 -> 1 2 3
queue1 -> 4 1 2 3
queue2 -> 空
swap(queue1,queue2)
注:保证每次栈顶都插入一个空队列,然后从另外一个队列引入剩余元素
代码1:
class MyStack {
public:
queue<int> queue1;//用来存放栈顶
queue<int> queue2;//用来临时存储
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
queue2.push(x);
while(!queue1.empty()){
queue2.push(queue1.front());
queue1.pop();
}
swap(queue1,queue2);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int r=queue1.front();
queue1.pop();
return r;
}
/** Get the top element. */
int top() {
return queue1.front();
}
/** Returns whether the stack is empty. */
bool empty() {
return queue1.empty();
}
};
思路2:
使用一个队列实现
queue1 -> 1 2 3 4 (4为栈顶)
queue1 -> 4 1 2 3
注:将队列所有在4前面进行弹出重新插入
代码2:
class MyStack {
public:
queue<int> queue1;
/** Initialize your data structure here. */
MyStack() {
}
/** Push element x onto stack. */
void push(int x) {
queue1.push(x);
while(queue1.front()!=x){
queue1.push(queue1.front());
queue1.pop();
}
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int r=queue1.front();
queue1.pop();
return r;
}
/** Get the top element. */
int top() {
return queue1.front();
}
/** Returns whether the stack is empty. */
bool empty() {
return queue1.empty();
}
};
该博客探讨了两种利用队列实现栈操作的方法。思路1通过双队列交换实现,每次push时将queue1的元素转移至queue2,再将新元素入队。思路2则在push时将所有在新元素前的旧元素弹出并重新插入队列。这两种方法确保了栈顶元素的操作效率。
408

被折叠的 条评论
为什么被折叠?



