设计一个模板栈类 STACK,其包含判断栈是否为空、进栈和出栈三个运算。要求用两个队列qu1、qu2 模拟栈,其中队列用STL中queue<T>模板容器表示,并提供必要的测试代码。
时间: 2024-12-21 18:31:02 浏览: 6
设计一个模板栈类`STACK`,可以使用两个队列`qu1`和`qu2`来模拟栈的功能,这里我们假设`qu1`作为入栈操作,`qu2`作为出栈操作。栈的基本操作包括判断是否为空、进栈(push元素到栈顶)和出栈(pop元素并返回顶部元素)。以下是实现该类的代码:
```cpp
#include <queue>
template <typename T>
class STACK {
private:
std::queue<T> qu1;
std::queue<T> qu2;
public:
// 判断栈是否为空
bool isEmpty() const {
return qu1.empty();
}
// 进栈操作(将元素推入队列qu1)
void push(const T& item) {
qu1.push(item);
}
// 出栈操作(从队列qu2弹出元素,如果qu2为空则将qu1中的元素移至qu2)
T pop() {
if (qu2.empty()) {
while (!qu1.empty()) {
qu2.push(qu1.front());
qu1.pop();
}
}
return qu2.front(); // 返回并移除qu2头部的元素
}
};
```
测试代码示例:
```cpp
int main() {
STACK<int> stack;
// 测试空栈
assert(stack.isEmpty()); // 应返回true
// 入栈
stack.push(1);
stack.push(2);
stack.push(3);
// 验证非空
assert(!stack.isEmpty()); // 应返回false
// 出栈并验证结果
int top = stack.pop();
assert(top == 3); // 应返回3
top = stack.pop();
assert(top == 2); // 应返回2
// 再次出栈验证
top = stack.pop();
assert(top == 1); // 应返回1
// 最后应再次检测栈为空
assert(stack.isEmpty()); // 应返回true
return 0;
}
```
阅读全文