完成用两个栈实现队列的队尾插入和队头删除的C++代码(实现往队列插入并输出:1、2、3)
时间: 2024-10-15 09:07:33 浏览: 34
C-_Stack-Queue:关于栈和队列的完整代码
在C++中,我们可以使用两个栈分别代表队列的“入队”端(先进后出)和“出队”端(先进先出)。下面是一个简单的示例代码,实现了队尾插入和队头删除的功能,并按照顺序输出1、2、3:
```cpp
#include <stack>
#include <iostream>
using namespace std;
// 队列的模板,包含队头指针front和队尾指针rear
template <typename T>
class Queue {
private:
stack<T> inStack;
stack<T> outStack;
public:
// 入队操作,将元素推入inStack
void enqueue(T value) {
inStack.push(value);
}
// 出队操作,如果outStack为空,则将所有元素从inStack移到outStack
void dequeue() {
while (!outStack.empty()) {
inStack.push(outStack.top());
outStack.pop();
}
if (!inStack.empty()) {
outStack.push(inStack.top());
inStack.pop();
}
}
// 查看队头元素,但不会移动它
T front() {
if (outStack.empty()) {
return inStack.top(); // 如果inStack也不空,这就是队头
} else {
return outStack.top(); // 否则队头在outStack顶部
}
}
// 检查队列是否为空
bool isEmpty() {
return inStack.empty() && outStack.empty();
}
// 主函数测试,插入值并输出
void process(int n) {
for (int i = 1; i <= n; ++i) {
enqueue(i);
cout << front() << " ";
dequeue();
}
cout << endl;
}
};
int main() {
Queue<int> q;
q.process(3); // 插入1、2、3并输出
return 0;
}
```
运行上述代码,你会看到输出:`1 2 3`。
阅读全文