如何在C语言中实现一个链式栈,并展示入栈和出栈操作的代码示例?
时间: 2024-11-01 22:22:50 浏览: 18
要实现一个链式栈并展示其操作,我们首先需要理解栈是一种后进先出(LIFO)的数据结构,支持两种主要操作:入栈(push)和出栈(pop)。链式栈通过链表实现,每个节点包含数据和指向下一个节点的指针。下面是一个简单的链式栈实现示例:
参考资源链接:[清华大学严蔚敏版《数据结构》第二版习题解析](https://wenku.csdn.net/doc/4rs2xs6mg6?spm=1055.2569.3001.10343)
首先定义链式栈的节点结构体和栈结构体:
```c
typedef struct StackNode {
int data;
struct StackNode *next;
} StackNode, *LinkStackPtr;
typedef struct LinkStack {
LinkStackPtr top;
int count;
} LinkStack;
```
接下来,实现入栈操作:
```c
void push(LinkStack *s, int e) {
LinkStackPtr newPtr = (LinkStackPtr)malloc(sizeof(StackNode));
newPtr->data = e; // 将元素值赋给新节点的data域
newPtr->next = s->top; // 新节点的next域指向前一个栈顶节点
s->top = newPtr; // 更新栈顶指针为新节点,实现入栈操作
}
```
然后是出栈操作:
```c
int pop(LinkStack *s, int *e) {
LinkStackPtr p;
if (LinkStackEmpty(*s)) { // 判断栈是否为空
return 0; // 若栈为空,返回0,表示出栈失败
}
*e = s->top->data; // 将栈顶元素赋值给e
p = s->top; // 临时保存栈顶节点
s->top = s->top->next; // 更新栈顶指针为下一个节点,实现出栈操作
free(p); // 释放原栈顶节点的内存
return 1; // 返回1,表示出栈成功
}
```
在这段代码中,我们首先定义了链式栈的节点结构体和栈结构体。在入栈操作中,我们创建一个新的节点,并将其数据域赋值为要入栈的元素,然后将新节点的next指针指向当前的栈顶节点,并更新栈顶指针为新节点。出栈操作则是将栈顶元素赋值给一个变量,并将栈顶指针更新为下一个节点的指针,最后释放原栈顶节点的内存。
通过这个链式栈的实现,我们可以灵活地进行入栈和出栈操作,而不受数组大小的限制。如果希望深入学习更多关于数据结构和算法的内容,特别是对线性表、栈、队列等数据结构的实现和应用有更全面的了解,推荐阅读《清华大学严蔚敏版《数据结构》第二版习题解析》。这本资料不仅包括了习题答案,还提供了详细的问题解析和思路拓展,非常适合初次学习数据结构和考研复习的学生使用。
参考资源链接:[清华大学严蔚敏版《数据结构》第二版习题解析](https://wenku.csdn.net/doc/4rs2xs6mg6?spm=1055.2569.3001.10343)
阅读全文