#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 发布