顺序栈的相关操作

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

#define MAX 100

//栈的数据类型
typedef struct
{
	char name[20];
	float score;
}SElemType;
//顺序栈的存储结构
typedef struct stack
{
	SElemType *data;
	int top;		 //指示栈顶的位置
	int stackSize;	//栈的容量
}SqStack;
//1.栈的初始化
int initSqStack(SqStack *S,int max)
{
	S->data=(SElemType *)malloc(max*sizeof(SElemType));
	if(!S->data){printf("空间申请失败!");exit(0);}
	S->top=-1;
	S->stackSize=max;
	return 1;
}
//2.判断栈空
int SqStackEmpty(SqStack S)
{
	if(S.top=-1) return 0;  //栈空返回0
	else return 1;  
}
//3.获取栈顶元素
int SqStackGetTop(SqStack S,SElemType *e)
{
	if(SqStackEmpty(S)) return 0;//栈空
	*e=S.data[S.top];
	return 1;
}
//4.求栈的长度
int SqStackLength(SqStack S)
{
	return S.top+1;
}
//5.进栈
int Push(SqStack *S,SElemType e)
{
	if(S->stackSize==S->top+1) return 0;
	S->top++;
	S->data[S->top]=e;
	return 1;
}
//6.出栈
int Pop(SqStack *S,SElemType *e)
{
	if(SqStackEmpty(*S)) return 0;
	*e=S->data[S->top];
	S->top--;
	return 1;
}
//7.遍历
int SqStackTraverse(SqStack S)
{
	int k;
	if(SqStackEmpty(S)){ return 0;}
	
	for(k=S.top;k>=0;k--)
	{printf("%s %7.2f\n",S.data[k].name,S.data[k].score);}
	return 1;
}
//8.创建栈
void createSqStack(SqStack *S,int max)
{
	SElemType x;
	int yn;
	initSqStack(S,max);
	do{
		printf("请输入进栈的学生数据:");
		scanf("%s%f",x.name,&x.score);
		Push(S,x);
		printf("继续输入吗?yes=1,no=0:");
		scanf("%d",&yn);
	}while(yn);

}
int main()
{
	SqStack S;
	SElemType e1,e2,e3,e4,etop;
	strcpy(e1.name,"A");
	strcpy(e2.name,"B");
	strcpy(e3.name,"C");
	strcpy(e4.name,"D");
	e1.score=87.44;
	e2.score=69.22;
	e3.score=56.33;
	e4.score=89.22;
//	createSqStack(&S,10);
	initSqStack(&S,10);
	Push(&S,e1);Push(&S,e2);Push(&S,e3);Push(&S,e4);

	SqStackTraverse(S);
	printf("当前栈长:%d\n",SqStackLength(S));
	
	SqStackGetTop(S,&etop);
	printf("栈顶元素%s,%7.2f:\n",etop.name,etop.score);


	Pop(&S,&etop);
	SqStackTraverse(S);
	printf("当前栈长:%d\n",SqStackLength(S));
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值