“用两个栈来实现一个队列”。先用一个栈来存 数据(这时最先进入的数据在栈底),然后再将第一个栈 的数据移动到新栈中,此时最先进入的数据就在栈顶了, 然后再用第二个栈出栈时,整个执行的顺序就变成了先进 先出。用C++实现
时间: 2024-12-13 19:27:21 浏览: 8
要用两个栈来实现一个队列,可以按照以下步骤操作:
首先,定义两个栈,分别称为 push_stack 和 pop_stack。这里假设我们使用 C++ 的标准库 `<stack>` 来实现这两个栈。
```cpp
#include <stack>
class Queue {
private:
std::stack<int> push_stack;
std::stack<int, std::deque<int>> pop_stack; // 使用 deque 类型保证出栈高效
public:
void enqueue(int value) { // 入队操作
push_stack.push(value);
}
int dequeue() { // 出队操作
if (push_stack.empty()) {
while (!pop_stack.empty()) { // 将 push_stack 中的数据移到 pop_stack
push_stack.pop();
pop_stack.push(push_stack.top());
}
}
int result = push_stack.top(); // 出队的元素在 pop_stack 的顶部
push_stack.pop();
return result;
}
};
```
在这个实现中,当 `enqueue` 时,直接将元素压入 `push_stack`。而 `dequeue` 时,如果 `push_stack` 空,则从 `pop_stack` 依次弹出元素并压回 `push_stack`,然后取 `push_stack` 的顶部元素作为出队结果。这样就实现了先进先出(FIFO)的行为。
阅读全文