用C语言实现顺序栈和链栈的定义、创建、入栈和出栈操作。
时间: 2024-12-20 20:24:52 浏览: 12
C语言 栈的实现,包含顺序栈和链栈,亲测可用
5星 · 资源好评率100%
在C语言中,我们可以分别使用数组(顺序存储)和链表(动态存储)来实现栈的数据结构。
### 1. 顺序栈(基于数组实现)
**定义:**
```c
typedef struct {
int* base; // 栈底指针
int top; // 栈顶指针
int capacity; // 栈容量
} Stack;
```
**创建:**
```c
Stack s = {NULL, -1, CAPACITY}; // 初始化栈,base设为NULL,top设为-1表示空栈,capacity为预设值
```
**入栈(push):**
```c
void push(Stack *s, int value) {
if (s->top == s->capacity - 1) {
printf("Stack overflow.\n");
return;
}
s->base[++(s->top)] = value;
}
```
**出栈(pop):**
```c
int pop(Stack *s) {
if (s->top < 0) {
printf("Stack underflow.\n");
return -1; // 返回错误码,表示为空栈
}
return s->base[s->top--];
}
```
### 2. 链栈(基于链表实现)
**定义:**
```c
typedef struct Node {
int data;
struct Node* next;
} Node;
typedef struct {
Node* top;
} LinkedStack;
```
**创建:**
```c
LinkedStack ls = {NULL};
```
**入栈(push):**
```c
void push(LinkedStack *ls, int value) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->data = value;
newNode->next = ls->top;
ls->top = newNode;
}
```
**出栈(pop):**
```c
int pop(LinkedStack *ls) {
if (ls->top == NULL) {
printf("Stack is empty.\n");
return -1;
}
int value = ls->top->data;
Node* temp = ls->top;
ls->top = ls->top->next;
free(temp);
return value;
}
```
阅读全文