c++用两个栈实现队列
时间: 2024-09-08 18:03:12 浏览: 37
在C++中,你可以通过两个栈来实现队列的数据结构。这个过程通常被称为双端队列(Deque),虽然标准库已经提供了一种高效的方式来实现这个功能(`std::deque`),但如果需要手动实现,可以用如下的方式:
```cpp
#include <stack>
class MyQueue {
private:
std::stack<int> pushStack; // 入栈栈
std::stack<int> popStack; // 出栈栈,用于临时存储元素以便于出队操作
public:
void enqueue(int val) {
pushStack.push(val);
}
int dequeue() {
if (popStack.empty()) { // 如果出栈栈为空,则将入栈栈的元素转移过来
while (!pushStack.empty()) {
popStack.push(pushStack.top());
pushStack.pop();
}
}
if (popStack.empty()) { // 如果此时仍然空,说明队列也为空,抛出异常或返回特定值
throw std::runtime_error("Queue is empty");
}
return popStack.top(); // 返回并移除栈顶元素
}
bool isEmpty() {
return pushStack.empty() && popStack.empty();
}
};
```
在这个实现中,当需要入队时,直接压入`pushStack`;出队时,先检查`popStack`是否为空,如果为空则从`pushStack`转移到`popStack`再出队。
阅读全文