2) 链栈的结构体定义及基本操作(初始化、判空、进栈、出栈、读取栈顶元素)
时间: 2024-12-13 09:24:44 浏览: 2
链栈的各种基本运算的实现实验报告.pdf
链栈是一种利用链表实现的线性数据结构,它不像数组那样在固定位置存储元素,而是通过节点链接来动态管理。以下是链栈的基本结构体定义及其常见操作:
1. 结构体定义:
```c
typedef struct Node {
int data; // 存储的数据
struct Node* next; // 指向下一个节点的指针
} StackNode;
typedef StackNode* Stack; // 定义链栈类型为指向堆栈节点的指针
```
这里`StackNode`表示链栈中的每个节点,包含数据和指向下一个节点的指针。
2. 基本操作:
- 初始化(创建一个空栈):
```c
Stack createStack() {
Stack stack = (Stack)malloc(sizeof(StackNode)); // 分配内存
stack->next = NULL; // 设置头节点的next为空
return stack;
}
```
- 判空(判断栈是否为空):
```c
bool isEmpty(Stack stack) {
return stack->next == NULL;
}
```
- 进栈(也叫压栈):
```c
void push(Stack& stack, int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
newNode->data = value;
newNode->next = stack->next;
stack->next = newNode;
}
```
- 出栈(也叫弹栈):
```c
int pop(Stack& stack) {
if (isEmpty(stack)) return -1; // 如果为空则返回错误
int topValue = stack->next->data;
StackNode* temp = stack->next;
stack->next = stack->next->next;
free(temp); // 释放已使用的节点内存
return topValue;
}
- 读取栈顶元素(查看栈顶但不移除):
```c
int peek(Stack stack) {
if (isEmpty(stack)) return -1;
return stack->next->data;
}
```
阅读全文