栈的顺序储存结构

#include<stdio.h>
#include<stdlib.h>

typedef struct StackNod 
{
	int date;
	struct StackNod *next;
}StackNode,*LinkStackPtr;

typedef struct LinkStack
{
	LinkStackPtr top;
	int count;
}LinkStack;
//当栈为空时返回1否则返回0 
int StackEmpty(LinkStack s)
{
	if(s.count==0)
		return 1;
	else 
		return 0;
	
}
//进栈 
int Push(LinkStack *s,int e)
{
	LinkStackPtr s1=(LinkStackPtr)malloc(sizeof(StackNode));
	s1->date=e;
	s1->next = s->top; 
	s->top = s1;
	s->count++;
	return 1;	
}
//出栈 
int Pop(LinkStack *s,int *e)
{
	LinkStackPtr p;
	if(StackEmpty(*s))
		return 0;
	*e = s->top->date;
	p=s->top;
	s->top=s->top->next;	
	free(p);
	s->count--;
	return 1;
}

void PRINTF(LinkStack s)
{
	LinkStackPtr p;
	p=s.top;
	while(p)
	{
		printf("%d ",p->date);
		p=p->next;
	}
}
//取得栈顶元素,否则返回0 
int GetTop(LinkStack s,int *e)
{
	if(!StackEmpty(s))
	{
		*e=s.top->date;
		printf("当前栈顶元素为%d",*e);
		return 1; 
	}
	else
	{
		printf("\n栈已经为空");
		return 0;
	}
}
//返回栈顶元素的个数
int StackLenth(LinkStack s)
{
	int t = 0;
	LinkStackPtr p;
	p = s.top;
	while(p)
	{
		p=p->next;
		t++;
	} 
	return t;
}
//若栈存在则将栈清空
int ClearStack(LinkStack *s)
{
	LinkStackPtr p;
	while(s->top)
	{
		p=s->top;
		s->top=s->top->next;
		s->count--;
		free(p);
	}
	return 1;	
} 

int DestoryStack(LinkStack **s)
{
	ClearStack(*s);
	free(*s);
	return 1;
 } 
 
int main()
{
	LinkStack *s;
	s = (LinkStack*)malloc(sizeof(LinkStack));
	s->top=NULL;
	s->count=0;
	int i,temp,e;
	printf("栈的初始化\n请输入栈的初始元素个数:");
	scanf("%d",&temp);
	printf("请输入栈的元素:"); 
	for(i=0;i<temp;i++)
	{
		scanf("%d",&e);
		Push(s,e);
	}
	printf("当前栈内元素为:");
	PRINTF(*s);
	
	printf("\n请输入要出栈几个元素");
	scanf("%d",&temp);
	for(i=0;i<temp;i++)
	{
		Pop(s,&e);
		if(StackEmpty(*s))
		{
			printf("\n%d出栈后栈已经为空",e);
			break;
		}
		else
		printf("%d出栈成功\n",e);
	}
	
	GetTop(*s,&e);
	printf("\n栈内还有%d个元素",StackLenth(*s));
	ClearStack(s);
	printf("\n栈已经清空");
	DestoryStack(&s);
	printf("\n栈已经摧毁");
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值