如何实现链式存储结构在C语言中的栈数据结构?
时间: 2024-11-27 10:09:07 浏览: 6
在C语言中,实现链式存储结构的栈可以使用动态内存分配和节点链接的方式。以下是一种基本的链式栈(基于单向链表)的实现步骤:
1. 定义栈节点结构体:
```c
typedef struct Node {
int data; // 存储的数据元素
struct Node* next; // 指向下一个节点的指针
} StackNode;
```
2. 创建栈头指针并初始化为NULL:
```c
StackNode* top = NULL;
```
3. **压栈(Push)操作**:
- 分配新的节点内存。
- 将新元素赋值给新节点。
- 新节点的`next`指向当前栈顶,然后将栈顶指针更新为新节点。
```c
void push(int value) {
StackNode* newNode = (StackNode*)malloc(sizeof(StackNode));
if (newNode == NULL) { // 检查内存分配是否成功
printf("Memory allocation failed.\n");
return;
}
newNode->data = value;
newNode->next = top;
top = newNode;
}
```
4. **弹栈(Pop)操作**:
- 如果栈为空,则返回错误信息或抛出异常。
- 否则,将栈顶节点的`data`复制到临时变量,然后释放栈顶节点并调整栈顶指针。
```c
int pop() {
if (top == NULL) {
printf("Stack is empty.\n");
return -1; // 或者抛出异常
}
int poppedValue = top->data;
StackNode* tempTop = top;
top = top->next;
free(tempTop); // 释放已弹出节点的内存
return poppedValue;
}
```
5. **查看栈顶元素(Peek)**:
- 如果栈为空,同样处理错误情况。
- 否则,直接返回栈顶节点的`data`。
```c
int peek() {
if (top == NULL) {
printf("Stack is empty.\n");
return -1; // 或者抛出异常
}
return top->data;
}
```
阅读全文