C++:用结构体编写一个程序,在自定义函数中完成下列功能并在主函数中进行测试(下列要求中所说的栈均指顺序栈) : (1)初始化栈S。 (2)销毁栈S。 (3)判断栈S是否为空。 (4)将元素e入栈。 (5)将栈顶元素出栈并保存到元素e中。
时间: 2024-10-13 20:17:28 浏览: 43
在C++中,我们可以创建一个结构体`StackElement`表示栈中的元素,并用一个动态数组来实现栈的数据结构。下面是一个简单的结构体、栈类以及包含所需功能的实现:
```cpp
#include <iostream>
#include <stack>
// 定义栈的元素结构体
struct StackElement {
int value;
};
class MyStack {
private:
std::stack<StackElement> s; // 使用C++标准库中的栈
public:
// 初始化栈
void initialize() {
s.clear(); // 清空栈
std::cout << "Stack initialized.\n";
}
// 销毁栈
~MyStack() {
s.pop(); // 如果栈非空,弹出最后一个元素(实际上不需要做,因为析构时会自动清空)
std::cout << "Stack destroyed.\n";
}
// 判断栈是否为空
bool isEmpty() const {
return s.empty();
}
// 入栈操作
void push(int e) {
StackElement se = {e};
s.push(se);
std::cout << "Pushed element " << e << " to stack.\n";
}
// 出栈操作并返回值
void pop(StackElement& e) {
if (!isEmpty()) {
e = s.top(); // 获取栈顶元素
s.pop();
std::cout << "Popped top element: " << e.value << ".\n";
} else {
std::cout << "Stack is empty.\n";
}
}
};
int main() {
MyStack stack;
// 测试
stack.initialize();
stack.push(10);
stack.push(20);
StackElement top;
stack.pop(top); // 应该弹出20并保存到top
stack.isEmpty() ? std::cout << "Stack is empty." : std::cout << "Stack is not empty.";
return 0;
}
```
在这个例子中,我们首先初始化了一个`MyStack`对象,然后演示了如何推入元素并弹出栈顶元素。在主函数的最后,我们检查栈是否为空。注意,当栈被销毁时,其内容会在析构时自动清除,因此无需显式地调用`destroy()`函数。
阅读全文