用C语言描述栈的每种操作在顺序栈或链栈上的实现
时间: 2024-11-09 09:17:27 浏览: 12
C语言 栈的实现,包含顺序栈和链栈,亲测可用
5星 · 资源好评率100%
栈是一种线性数据结构,通常用于存储临时数据,支持“先进后出”(LIFO)的原则。在C语言中,有两种基本的栈实现方式:顺序栈(基于数组)和链栈(基于链表)。
**顺序栈(基于数组)**:
1. **创建栈**:
- 初始化一个固定大小的数组,并设一个指向数组顶部的指针(称为栈顶)。
```c
int stack[STACK_SIZE], top = -1;
```
2. **入栈(Push)**:
- 检查栈顶是否已满,如果不满则将元素存放在top+1位置并更新top。
```c
void push(int item) {
if (top < STACK_SIZE - 1) {
stack[++top] = item;
} else {
printf("Stack overflow");
}
}
```
3. **出栈(Pop)**:
- 如果栈不为空,将栈顶元素赋值给变量,然后top减一。
```c
int pop() {
if (top >= 0) {
return stack[top--];
} else {
printf("Stack underflow");
return -1; // 返回空或者错误代码
}
}
```
4. **查看栈顶元素(Peek)**:
- 直接访问栈顶,无需删除。
```c
int peek() {
if (top >= 0) {
return stack[top];
} else {
printf("Stack is empty");
return -1;
}
}
```
**链栈(基于链表)**:
1. **创建链栈**:
- 创建一个节点结构体,包含数据域和指向下一个节点的指针。
```c
struct Node {
int data;
struct Node* next;
};
struct Stack *top;
```
2. **入栈(Push)**:
- 新建一个节点,将其data设置为元素,next指向当前栈顶,然后更新top指针。
```c
void push(int item) {
struct Node* newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = item;
newNode->next = top;
top = newNode;
}
```
3. **出栈(Pop)**:
- 删除栈顶节点,即释放top所指节点,并将top指向下一个节点。
```c
int pop() {
if (top != NULL) {
int data = top->data;
struct Node* temp = top;
top = top->next;
free(temp);
return data;
} else {
printf("Stack is empty");
return -1;
}
}
```
阅读全文