并在此基础上设计一个程序exp2-1.cpp完成下述功能:①初始化栈s。②判断栈s是否非空。③依次进栈元素a、b、c、d、e。④判断栈s是否非空。⑤输出出栈序列。⑥判断栈s是否非空。⑦释放栈s.
时间: 2024-10-22 07:21:51 浏览: 40
MSP-EXP430G2_LaunchPad试验板_使用指南
在`exp2-1.cpp`程序中,我们将按照上述功能描述实现一个简单的顺序栈。这里是一个基本的实现例子:
```cpp
#include <iostream>
#include <vector> // 使用vector作为动态数组替代手动管理内存
class MyStack {
private:
std::vector<char> data;
int top;
public:
// 初始化栈
MyStack() : top(0) {}
// 判断栈是否为空
bool isEmpty() const {
return top == 0;
}
// 进栈(入栈)
void push(char item) {
if (data.size() - top == 0) { // 检查是否已满
data.resize(data.size() * 2); // 扩大容量
}
data[top++] = item;
}
// 出栈(出栈并返回顶部元素)
char pop() {
if (isEmpty()) {
throw std::runtime_error("Stack underflow");
}
char item = data[top - 1]; // 保存栈顶元素
data.pop_back(); // 删除栈顶元素
return item;
}
// 输出栈顶元素
char getTop() const {
if (isEmpty()) {
throw std::runtime_error("Stack is empty");
}
return data[top - 1];
}
};
int main() {
try {
// 初始化栈
MyStack s;
// 判断栈是否为空
std::cout << "Is stack empty? " << (s.isEmpty() ? "Yes" : "No") << "\n";
// 进栈元素
s.push('a'); s.push('b'); s.push('c'); s.push('d'); s.push('e');
// 再次判断栈是否为空
std::cout << "Is stack empty after pushing elements? " << (s.isEmpty() ? "Yes" : "No") << "\n";
// 输出出栈序列
std::cout << "Popped elements: ";
for (size_t i = 0; i < 5; ++i) {
std::cout << s.pop() << " ";
}
std::cout << "\n";
// 又次判断栈是否为空
std::cout << "Is stack empty after popping elements? " << (s.isEmpty() ? "Yes" : "No") << "\n";
} catch (const std::exception& e) {
std::cerr << "Error: " << e.what() << "\n";
}
return 0;
}
```
阅读全文