编写程序,实现顺序栈的基本运算,并在此基础上设计一个主程序并完成如下功能:(1)初始化栈s;(2)判断栈s是否非空;(3)依次进栈元素A,B,C,D,E;(4)输出栈内元素个数;(5)输出栈顶元素;(
时间: 2024-11-07 22:13:34 浏览: 10
数据结构栈和队列
编写顺序栈(也称数组栈)的基本运算主要包括以下几种:
1. 初始化栈(构造函数):
```c++
struct Stack {
private:
int* data; // 存储栈元素的数组
int top; // 栈顶指针
int size; // 栈的最大容量
public:
Stack(int capacity) : data(new int[capacity]), top(0), size(capacity) {}
~Stack() { delete[] data; } // 析构函数释放内存
};
```
2. 判断栈是否为空(is_empty):
```c++
bool is_empty(Stack& s) {
return s.top == 0;
}
```
3. 入栈(push):
```c++
void push(Stack& s, int value) {
if (s.is_full()) {
throw std::overflow_error("Stack overflow"); // 当栈满时抛出异常
}
s.data[s.top++] = value;
}
```
4. 出栈(pop):
```c++
int pop(Stack& s) {
if (is_empty(s)) {
throw std::underflow_error("Stack underflow"); // 当栈空时抛出异常
}
int value = s.data[s.top - 1];
s.top--;
return value;
}
```
5. 获取栈顶元素(peek):
```c++
int peek(Stack& s) {
if (is_empty(s)) {
throw std::runtime_error("Cannot peek at an empty stack");
}
return s.data[s.top - 1];
}
```
6. 输出栈内元素个数(size):
```c++
int get_size(Stack& s) {
return s.top;
}
```
主程序示例(C++):
```cpp
int main() {
Stack s(5); // 初始化栈,最大容量为5
try {
push(s, 'A');
push(s, 'B');
push(s, 'C');
push(s, 'D');
push(s, 'E'); // 注意这里不会溢出,因为预留了额外的空间
cout << "Stack size: " << get_size(s) << endl; // 输出当前栈大小
cout << "Top element: " << peek(s) << endl; // 输出栈顶元素
cout << "Elements in the stack: ";
while (!s.is_empty()) {
cout << s.pop() << " ";
}
cout << endl;
} catch (const std::exception& e) {
cerr << "Error: " << e.what() << endl;
}
return 0;
}
```
阅读全文