编写一个程序sqstack.cpp,实现顺序栈的各种基本运算,并在此基础上设计一个程序完成以下功能 (1)初始化栈s;(2)判断栈是否非空;(3)依次进栈元素a、b、c、d、e;(4)判断栈s是否非空;(5)输出栈顺序;(6)判断栈s是否非空;(7)释放栈
时间: 2024-09-30 07:07:53 浏览: 23
为了实现这个顺序栈(也称作数组栈),我们可以使用C++来编写一个`SqStack`类,它包含基本的构造函数、入栈(push)、出栈(pop)、查看栈顶元素(top)、检查栈是否为空(empty)以及析构函数来释放内存。下面是一个简单的实现:
```cpp
#include <iostream>
class SqStack {
private:
int* data; // 栈的数据存储
int top; // 栈顶指针
int capacity; // 栈的容量
public:
// 初始化栈
SqStack(int size) : data(new int[size]), top(-1), capacity(size) {}
// 判断栈是否为空
bool isEmpty() const { return top == -1; }
// 入栈
void push(int value) {
if (top < capacity - 1) {
data[++top] = value;
} else {
std::cout << "Stack overflow!\n";
}
}
// 出栈并返回值
int pop() {
if (isEmpty()) {
std::cout << "Stack underflow!\n";
return -1; // 返回默认值或抛异常处理
}
return data[top--];
}
// 查看栈顶元素(不删除)
int peek() const {
if (isEmpty()) {
std::cout << "Stack is empty.\n";
return -1;
}
return data[top];
}
// 释放栈内存
~SqStack() {
delete[] data;
}
// 打印栈内容
void printStack() const {
for (int i = 0; i <= top; ++i) {
std::cout << "Element at index " << i << ": " << data[i] << "\n";
}
}
};
// 示例程序
int main() {
SqStack s(5); // 初始化栈,容量为5
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
std::cout << "Is stack empty? " << (s.isEmpty() ? "Yes" : "No") << "\n"; // 判断非空
s.printStack(); // 输出栈顺序
std::cout << "Is stack empty? " << (s.isEmpty() ? "Yes" : "No") << "\n"; // 再次判断非空
s.pop(); // 出栈
s.pop();
s.printStack(); // 输出剩余元素
s.printStack(); // 确保栈已清空后再打印
return 0;
}
```
在这个示例程序中,我们首先创建了一个大小为5的栈`s`,然后按照题目描述的操作进行。注意,在实际应用中,错误处理如栈溢出或欠流通常需要更详细的错误提示。
阅读全文