栈的基本操作

本文介绍了一个使用 C 语言实现的链式栈数据结构。通过定义结构体 StackNode 和 LinkStack,实现了栈的基本操作如初始化、压栈、弹栈、显示等,并提供了完整的源代码示例。
#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);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值