.用两个队列模拟一个栈
时间: 2024-02-11 22:31:49 浏览: 82
用两个栈实现队列.md
假设我们要实现的栈有以下几个方法:push、pop、top、empty。
我们可以使用两个队列来模拟一个栈,假设它们分别为queue1和queue2。
1. push操作:将元素插入到非空的队列中,如果两个队列都为空,则默认插入到队列queue1中。
```
void push(int x) {
if (queue1.empty() && queue2.empty()) {
queue1.push(x);
return;
}
if (!queue1.empty()) {
queue1.push(x);
} else {
queue2.push(x);
}
}
```
2. pop操作:将非空队列中除了最后一个元素之外的所有元素放入到另一个队列中,然后弹出最后一个元素即可。
```
int pop() {
int res;
if (!queue1.empty()) {
while (queue1.size() > 1) {
queue2.push(queue1.front());
queue1.pop();
}
res = queue1.front();
queue1.pop();
} else {
while (queue2.size() > 1) {
queue1.push(queue2.front());
queue2.pop();
}
res = queue2.front();
queue2.pop();
}
return res;
}
```
3. top操作:与pop操作类似,不过需要在弹出最后一个元素之前先将其保存下来。
```
int top() {
int res;
if (!queue1.empty()) {
while (queue1.size() > 1) {
queue2.push(queue1.front());
queue1.pop();
}
res = queue1.front();
queue2.push(queue1.front());
queue1.pop();
} else {
while (queue2.size() > 1) {
queue1.push(queue2.front());
queue2.pop();
}
res = queue2.front();
queue1.push(queue2.front());
queue2.pop();
}
return res;
}
```
4. empty操作:如果两个队列都为空,则栈为空。
```
bool empty() {
return queue1.empty() && queue2.empty();
}
```
阅读全文