如何使用C/C++编程语言中的结构体定义并实现一个顺序栈数据结构?请包括栈的基本操作,如入栈(push),出栈(pop),查看栈内元素(peek)以及获取栈的当前大小(get_stack_length)。
时间: 2024-11-30 18:15:14 浏览: 33
在C/C++中,可以使用结构体和数组来实现一个简单的顺序栈(也称为线性栈)数据结构。首先,我们需要定义一个结构体来存储栈中的元素:
```cpp
#include <iostream>
// 定义栈的元素类型
struct StackElement {
int data; // 存储整数
};
// 定义栈的数据结构
class Stack {
private:
StackElement* top; // 指向栈顶元素的指针
int capacity; // 栈的最大容量
int size; // 当前栈的大小
public:
// 构造函数,初始化空栈
Stack(int capacity) : top(nullptr), capacity(capacity), size(0) {}
// 检查栈是否为空
bool isEmpty() const { return top == nullptr; }
// 判断栈是否已满
bool isFull() const { return size == capacity; }
// 入栈操作 (push)
void push(int value) {
if (isFull()) {
std::cout << "Stack overflow.\n";
return;
}
StackElement newElement = {value};
top = &newElement;
size++;
}
// 出栈操作 (pop)
void pop() {
if (isEmpty()) {
std::cout << "Stack underflow.\n";
return;
}
top = top->next;
size--;
}
// 查看栈顶元素 (peek)
int peek() const {
if (isEmpty()) {
std::cout << "Stack is empty.\n";
return -1; // 返回错误值表示栈空
}
return top->data;
}
// 获取栈的当前大小 (get_stack_length)
int getStackSize() const { return size; }
// 错误处理:释放内存
~Stack() {
while (!isEmpty()) {
pop();
}
delete[] top;
}
};
```
上述代码中,我们创建了一个`Stack`类,它内部包含一个指向栈顶的指针`top`、栈的最大容量`capacity`和实际大小`size`。实现了基本的栈操作:push(入栈)、pop(出栈)、peek(查看栈顶元素)以及getStackSize(获取栈的大小)。同时,还包含了防止溢出和下溢的检查,并在构造函数和析构函数中对内存进行了相应的管理。
阅读全文