用基于c++的数据结构编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试(下列要求中所说的栈均指顺序栈): (1)初始化栈S。 (2)销毁栈S。 (3)判断栈S是否为空。 (4)将元素e入栈。 (5)将栈顶元素出栈并保存到元素e中。
时间: 2024-10-12 10:16:14 浏览: 42
在C++中,我们可以使用`std::stack`模板类来实现这个简单的栈数据结构,它是一个容器适配器,实现了LIFO(Last In First Out)原则。以下是完整的代码实现:
```cpp
#include <iostream>
#include <stack>
// 自定义栈类
class CustomStack {
private:
std::stack<int> s; // 使用标准库提供的顺序栈
public:
// 初始化栈
void initStack() {
s.clear(); // 清空栈
}
// 销毁栈
~CustomStack() {
s.pop(); // 出栈所有元素直到栈为空
while (!s.empty()) { // 确保栈清空
s.pop();
}
}
// 判断栈是否为空
bool isEmpty() const {
return s.empty();
}
// 入栈操作
void push(int e) {
s.push(e);
}
// 出栈操作
void pop(int& e) {
if (isEmpty()) {
std::cout << "Stack is empty!" << std::endl;
return;
}
e = s.top(); // 保存栈顶元素
s.pop(); // 出栈
}
};
int main() {
CustomStack stack;
// 测试
stack.initStack(); // 初始化栈
std::cout << "Stack initialized.\n";
int value;
stack.isEmpty() ? std::cout << "Stack is empty." : std::cout << "Stack is not empty.\n"; // 判断栈是否为空
stack.push(10); // 入栈
stack.push(20);
stack.pop(value); // 出栈并保存到value
std::cout << "Top element after pop: " << value << "\n";
stack.pop(value); // 再次尝试出栈,此时栈已空,不会抛异常
stack.isEmpty() ? std::cout << "Stack is now empty." : std::cout << "Stack is still not empty (expected behavior for an empty stack)\n";
return 0;
}
```
阅读全文