c语言实现链栈的创建、进栈和出栈
时间: 2023-11-23 21:05:41 浏览: 101
c语言堆栈原理和代码详解
链栈是一种基于链表实现的栈结构,相比于顺序栈,链栈的长度不会受到固定容量的限制,更加灵活。
下面是C语言实现链栈的基本操作:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义链栈结构体
typedef struct node {
int data;
struct node *next;
} StackNode, *LinkStackPtr;
typedef struct {
LinkStackPtr top;
int count;
} LinkStack;
// 初始化链栈
void initStack(LinkStack *s) {
s->top = NULL;
s->count = 0;
}
// 判断链栈是否为空
int isStackEmpty(LinkStack *s) {
return s->count == 0;
}
// 入栈
int push(LinkStack *s, int data) {
// 创建新节点
LinkStackPtr newNode = (LinkStackPtr)malloc(sizeof(StackNode));
if (!newNode) {
return 0;
}
// 节点赋值
newNode->data = data;
newNode->next = s->top;
// 修改栈顶指针
s->top = newNode;
s->count++;
return 1;
}
// 出栈
int pop(LinkStack *s, int *data) {
if (isStackEmpty(s)) {
return 0;
}
// 修改栈顶指针
LinkStackPtr topNode = s->top;
s->top = topNode->next;
// 取出数据
*data = topNode->data;
// 释放节点
free(topNode);
s->count--;
return 1;
}
// 测试
int main() {
LinkStack s;
initStack(&s);
push(&s, 1);
push(&s, 2);
push(&s, 3);
int data;
pop(&s, &data);
printf("%d\n", data);
pop(&s, &data);
printf("%d\n", data);
pop(&s, &data);
printf("%d\n", data);
return 0;
}
```
需要注意的是,在入栈和出栈操作中,需要修改栈顶指针的指向,以维护链栈的结构。
阅读全文