编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试《下列要求中所说的栈均指顺序线》:(1) 初始化栈S。(2) 销毁栈S。(3) 判断栈5是否为空。(4) 将元素e入栈。(5) 将栈顶元素出栈并保存到元素e中,
时间: 2024-10-11 22:07:54 浏览: 31
在C++中,我们可以创建一个简单的栈模板类来满足上述需求。这里我们假设使用`vector`作为底层数据结构来实现栈的功能:
```cpp
#include <iostream>
#include <stack>
template<typename T>
class CustomStack {
private:
std::stack<T> s;
public:
// (1) 初始化栈S
void initStack() {
s.clear(); // 清空栈
}
// (2) 销毁栈S
~CustomStack() {
// 栈的销毁通常自动完成,无需手动操作
}
// (3) 判断栈5是否为空
bool isEmpty() const {
return s.empty();
}
// (4) 将元素e入栈
void push(T e) {
s.push(e);
}
// (5) 将栈顶元素出栈并保存到元素e中
void pop(T& e) {
if (!isEmpty()) {
e = s.top();
s.pop();
} else {
throw std::runtime_error("Stack is empty");
}
}
};
int main() {
CustomStack<int> stack;
// 测试
try {
// (1) 初始化栈
stack.initStack();
// (3) 判断栈是否为空
if (stack.isEmpty()) {
std::cout << "Stack is empty.\n";
} else {
std::cout << "Stack is not empty.\n";
}
// (4) 入栈
int value = 5;
stack.push(value);
std::cout << "Pushed " << value << " to the stack.\n";
// (5) 出栈
int topValue;
stack.pop(topValue);
std::cout << "Popped top value from stack: " << topValue << "\n";
// 销毁栈,此处省略,因为栈在main函数结束时会自然释放
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << '\n';
}
return 0;
}
```
在这个例子中,我们在`main`函数中创建了一个`CustomStack`实例,并通过调用各个成员函数实现了栈的基本操作。当试图从空栈中弹出元素时,我们会捕获异常。
阅读全文