#include<stdio.h>
#include<stdlib.h>
typedef struct StackNode
{
int data;
struct StackNode *next;
}StackNode;
typedef struct LinkStack
{
StackNode* top;
int cout;
}LinkStack;
void LinkStackInit(LinkStack** s)
{
(*s)=(LinkStack *)malloc(sizeof(LinkStack));
(*s)->top=NULL;
(*s)->cout=0;
}
bool IsLinkStackEmpty(LinkStack *s)
{
return !(s->cout);
}
int LinkStackSize(LinkStack *s)
{
return s->cout;
}
void Push(LinkStack *s,int data)
{
StackNode* ptr=(StackNode*)malloc(sizeof(StackNode));
ptr->data=data;
ptr->next=s->top;
s->top=ptr;
s->cout++;
printf("成功插入%d\n",data);
}
void Pop(LinkStack *s)
{
if(IsLinkStackEmpty(s))
{
printf("栈空\n");
return;
}
StackNode* ptr=s->top;
printf("%d出栈\n",ptr->data);
s->top=s->top->next;
free(ptr);
s->cout--;
}
void LinkStackClear(LinkStack *s)
{
while(!IsLinkStackEmpty(s))
{
Pop(s);
}
}
void LinkStackDestory(LinkStack **s)
{
LinkStackClear(*s);
free(*s);
*s=NULL;
}
void LinkStackShow(LinkStack *s)
{
if(s==NULL)
{
printf("栈已被摧毁!!!\n");
return;
}
if(IsLinkStackEmpty(s))
{
printf("栈为空!!!\n");
return;
}
StackNode *ptr=s->top;
printf("自顶向下的顺序为:");
while(ptr!=NULL)
{
printf("%d ",ptr->data);
ptr=ptr->next;
}
printf("\n");
printf("栈的大小为%d\n",LinkStackSize(s));
}
void main()
{
LinkStack *st;
LinkStackInit(&st);
Push(st,5);
Push(st,6);
Push(st,7);
Push(st,8);
LinkStackShow(st);
// LinkStackClear(st);
// Pop(st);
// Pop(st);
// Pop(st);
LinkStackDestory(&st);
LinkStackShow(st);
}栈的基本操作
最新推荐文章于 2024-05-08 10:07:26 发布
本文介绍了一个使用 C 语言实现的链式栈数据结构。通过定义结构体 StackNode 和 LinkStack,实现了栈的基本操作如初始化、压栈、弹栈、显示等,并提供了完整的源代码示例。
4819

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



