严蔚敏版数据结构学生信息链栈
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
#include
typedef struct Student/*定义学生类*/ {
int num;
char name[20];
char sex[2];
int age;
float grade;
}stu;
typedef struct SNode
{
stu data;
struct SNode *next;
}*linkstack,SNode;
linkstack InitStack()/*构造一个空栈*/ {
linkstack s;
s=(linkstack)malloc(sizeof(SNode));
if(!s)
printf("ERROR\n");
else
{
s->next=NULL;
printf("OK\n");
return s;
}
}
void DestroyStack(linkstack s)/*销毁栈*/ {
linkstack p;
if(!s)
printf("ERROR\n");
else
{
while(s)
{
p=s;
s=s->next;
free(p);
}
printf("OK\n");
}
linkstack ClearStack(linkstack s)/*将栈清空*/
{
linkstack p;
if(!s)
printf("ERROR\n");
else
{
while(s->next)
{
p=s;
s=s->next;
free(p);
}
printf("OK\n");
return s;
}
}
void StackEmpty(linkstack s)/*空栈返回TRUE,否则返回FLASE*/ {
if(!s)
printf("ERROR\n");
else if(!s->next)
printf("TRUE\n");
else
printf("FLASE\n");
}
int StackLength(linkstack s)/*返回栈长度*/
{
linkstack p=s;
int i=0;
if(!s)
return -1;
else
{
while(p->next)
{
i++;
p=p->next;
}
return i;
}
}
stu GetTop(linkstack s)/*返回栈顶元素*/
if(!s->next)
printf("ERROR\n");
else
{
printf("OK\n");
return s->data;
}
}
linkstack Push(linkstack s)/*插入新元素*/
{
linkstack p;
p=(linkstack)malloc(sizeof(SNode));
if(!p)
{
printf("OVERFLOW\n");
return s;
}
else
{
printf("请输入插入学生的数据\n学号:");
scanf("%d",&p->data.num);
printf("姓名:");
scanf("%s",&p->);
printf("年龄:");
scanf("%d",&p->data.age);
printf("性别:");
scanf("%s",&p->data.sex);
printf("成绩:");
scanf("%f",&p->data.grade);
p->next=s;
s=p;
printf("OK\n");
return s;
}
}
linkstack Pop(linkstack s)/*删除栈顶元素*/
{
stu e;
linkstack p;
if(!s->next)
{
printf("ERROR\n");
return s;
}
else
{
e=s->data;
p=s;
s=s->next;
free(p);
printf("OK\n");
printf("删除的栈顶学生信息为:\n学号:%d\n姓名:%s\n性别:%s\n年龄:%d\n成绩:%f\n删除后表为:\n",e.num,,e.sex,e.age,e.grade);
return s;
}
}
void display(linkstack s)/*输出函数*/
{
linkstack p;
p=s;
printf("***************学生信息*****************\n");
printf(" 学号姓名性别年龄成绩\n");
if(p)
{
while(p->next)
{
printf("%d\t%s\t%s\t%d\t%f\n",p->data.num,p->,p->data.sex,p->data.age,p->data. grade);
p=p->next;
}
}
printf("****************************************\n");
}
void main()
{
linkstack s;
stu e;
int n,i,j;
s=InitStack();
printf("请输入任意键进入菜单..........\n");
getchar();
for(;;)
{
printf("***********************菜单******************\n");
printf(" 1.建了一个空栈\n");
printf(" 2.构建一个有关学生信息的栈\n");