用C++完成一个完整代码,创建一个栈类,要求实现构造函数、判断栈是否为空、出栈、入栈等操作,通过数组来间接实现。
时间: 2024-09-20 11:11:56 浏览: 142
顺序栈的代码
在C++中,我们可以创建一个栈类(Stack),通常使用数组作为底层数据结构。下面是一个基本的实现,包括了构造函数、判空、入栈和出栈操作:
```cpp
#include <iostream>
class Stack {
private:
static const size_t MAX_SIZE = 100; // 定义栈的最大容量
int* arr; // 数组用于存储元素
size_t top; // 栈顶指针,指向当前栈顶元素
public:
// 构造函数,初始化栈并分配内存
Stack() : arr(new int[MAX_SIZE]), top(-1) {}
// 判断栈是否为空
bool isEmpty() const {
return top == -1;
}
// 入栈(push)操作
void push(int value) {
if (top < MAX_SIZE - 1) {
arr[++top] = value;
std::cout << "元素 " << value << " 入栈成功。\n";
} else {
std::cout << "栈已满,无法入栈。\n";
}
}
// 出栈(pop)操作
void pop() {
if (!isEmpty()) {
std::cout << "出栈元素: " << arr[top] << "\n";
top--;
} else {
std::cout << "栈为空,无法出栈。\n";
}
}
// 错误处理析构函数(清理资源)
~Stack() {
delete[] arr;
}
};
int main() {
Stack s;
s.push(1);
s.push(2);
s.push(3);
s.pop(); // 应该弹出3
s.pop(); // 应该弹出2
// 调用pop操作后检查是否为空
std::cout << "栈是否为空: " << (s.isEmpty() ? "是" : "否") << "\n";
return 0;
}
```
在这个例子中,`Stack`类包含一个整型数组`arr`和一个`top`变量来追踪栈顶元素。构造函数负责初始化数组并设置`top`为-1。`isEmpty()`检查`top`是否等于-1,`push()`操作会增加`top`并将值放入数组,`pop()`则减小`top`并打印出栈顶元素。析构函数`~Stack()`确保了在堆上动态分配的内存被正确释放。
注意:在实际项目中,建议使用智能指针(如`std::unique_ptr<int[]>`)来管理内存,而不是手动分配和释放。上述代码仅为了演示目的而简化。
阅读全文