// 带头结点的链栈
#include <stdio.h>
#include <stdlib.h>
typedef struct LinkNode{
int data; // 存放元素
struct LinkNode* next; // 栈顶指针
}LinkStack;
// 初始化
LinkStack *InstLinkStack()
{
LinkStack* S = (LinkStack*)malloc(sizeof(LinkStack));
S->next = NULL;
return S;
}
// 判断链栈是否为空 S为头结点始终不动
void StackEmpty(LinkStack * S)
{
LinkStack * P = S;
if(P->next == NULL)
{
printf("链栈为空!\n");
}
else
{
printf("链栈不为空!\n");
}
}
// 入栈
void Push(LinkStack * S,int x)
{
LinkStack * P = S;
LinkStack * Q = (LinkStack*)malloc(sizeof(LinkStack));
Q->data = x;
Q->next = P->next;
P->next = Q;
}
// 出栈
void Pop(LinkStack *S)
{
LinkStack * P = S;
if(P->next == NULL)
{
printf("链栈为空!\n");
return;
}
while (P->next != NULL){
LinkStack * Q = P->next;
printf("出栈元素为:%d\n",Q->data);
P->next = Q->next;
}
}
// 读栈顶元素
int GetTop(LinkStack* S)
{
LinkStack * P = S;
if(P->next == NULL)
{
printf("链栈是空栈\n");
exit(1); //正常退出函数
}
P = P->next;
int e = P->data;
return e;
}
int main()
{
LinkStack* S = InstLinkStack();
StackEmpty(S);
Push(S,5);
Push(S,4);
Pop(S);
Push(S,3);
Push(S,2);
Push(S,1);
StackEmpty(S);
Pop(S);
printf("栈顶元素为:%d\n",GetTop(S));
return 0;
}
2021-08-06 C语言链栈
最新推荐文章于 2025-12-07 21:20:15 发布
该博客详细介绍了如何使用C语言实现带头结点的链栈,包括初始化、判断链栈是否为空、元素入栈、出栈以及读取栈顶元素等基本操作。通过实例展示了链栈的动态变化,为理解链栈的数据结构提供了清晰的示例。
1773

被折叠的 条评论
为什么被折叠?



