建立学生信息无头结点单链表C语言版.docx
- 文档编号:23408389
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:14
- 大小:16.42KB
建立学生信息无头结点单链表C语言版.docx
《建立学生信息无头结点单链表C语言版.docx》由会员分享,可在线阅读,更多相关《建立学生信息无头结点单链表C语言版.docx(14页珍藏版)》请在冰豆网上搜索。
建立学生信息无头结点单链表C语言版
#include
#include
typedefstructStudent/*定义学生类*/
{
intnum;
charname[20];
charsex[2];
intage;
floatgrade;
}stu;
typedefstructLNode
{
studata;
structLNode*next;
}LNode,*Linklist;
LinklistInitList_L(LinklistL)/*构造一个空的单向链表*/
{
L=(Linklist)malloc(sizeof(stu));
if(!
L)
printf("ERROR\n");
else
{
L=NULL;
printf("OK\n");
returnL;
}
}
voidDestroyList_L(LinklistL)//销毁单向链表*/
{
Linklistp;
if(!
L)
printf("ERROR\n");
else
{
while(L)
{
p=L;
L=L->next;
free(p);
}
printf("OK\n");
}
}
voidClearList_L(LinklistL)/*将L重置为空表*/
{
Linklistp;
if(!
L)
printf("ERROR\n");
else
{
while(L->next)
{
p=L->next;
L->next=p->next;
free(p);
}
printf("OK\n");
}
}
voidListEmpty_L(LinklistL)/*L为空表返回TRUE,否则返回FALSE*/
{
if(!
L)
printf("ERROR\n");
else
{
if(!
L->next)
printf("TRUE\n");
else
printf("FLASE\n");
}
}
intListLength_L(LinklistL)/*返回L中数据元素个数*/
{
inti=0;
Linklistp=L;
if(!
L)
return0;
else
{
while(p)
{
i++;
p=p->next;
}
returni;
}
}
voidGetElem_L(LinklistL,inti)//返回第i个元素的值*/
{
stue;
Linklistp=L;
intj=1;
while(p!
=NULL&&j
{
p=p->next;
++j;
}
if(!
p||j>i)
printf("ERROR\n");
else
{
printf("学生%d的数据为:
\n",i);
printf("学号:
%d\n姓名:
%s\n性别:
%s\n年龄:
%d\n成绩:
%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade);
printf("OK\n");
}
}
voidPriorElem_L(LinklistL,stucur_e)/*用pre_e返回cur_e的前驱*/
{
Linklistp=L;
while(p->next&&(p->next->data).num!
=cur_e.num)
p=p->next;
if(!
p->next)
printf("ERROR\n");
else
{
printf("cur_e的前驱为:
\n");
printf("num:
%d\nname:
%s\nsex:
%s\nage:
%d\ngrade:
%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade);
printf("OK\n");
}
}
voidNextElem_L(LinklistL,stucur_e)/*用next_e返回cur_e的后驱*/
{
Linklistp=L;
while(p&&(p->data).num!
=cur_e.num)
p=p->next;
if(!
p||!
p->next)
printf("ERROR\n");
else
{
printf("cur_e的后驱为:
\n");
printf("num:
%d\nname:
%s\nsex:
%s\nage:
%d\ngrade:
%f\n",p->next->data.num,p->next->data.name,p->next->data.sex,p->next->data.age,p->next->data.grade);
printf("OK\n");
}
}
voidListInsert_L(LinklistL,inti)/*在i位置之前插入新元素*/
{
intj=0;
Linklistp=L,s;
while(p&&j { p=p->next; ++j; } if(! p||j>i-2) printf("ERROR\n"); else { s=(Linklist)malloc(sizeof(LNode)); printf("请输入要插入的元素的数据: \n"); printf("学号: \n"); scanf("%d",&s->data.num); printf("姓名: \n"); scanf("%s",&s->data.name); printf("年龄\n"); scanf("%d",&s->data.age); printf("性别: \n"); scanf("%s",&s->data.sex); printf("成绩: \n"); scanf("%f",&s->data.grade); s->next=p->next; p->next=s; printf("OK\n"); } } voidListDelete_L(LinklistL,inti)/*删除第i个元素*/ { Linklistp=L,q; intj=0; while(p&&j { p=p->next; ++j; } if(! p->next||j>i-2) printf("ERROR\n"); else { q=p->next; p->next=q->next; free(q); printf("OK\n"); } } voidListTraverse_L(LinklistL,intvisit(stu))/*对L中每个元素调用函数visit()*/ { Linklistp=L->next; while(p) { if(! visit(p->data)) { printf("ERROR\n"); break; break; } } if(! p) printf("OK\n"); } LinklistListCreat_L()/*建立不带头结点的单链表*/ { LinklistL,p1,p2; intn=0; p1=p2=(Linklist)malloc(sizeof(LNode)); printf("请输入学生的数据,学号为零停止\n学号: \n"); scanf("%d",&p1->data.num); printf("姓名: \n"); scanf("%s",&p1->data.name); printf("年龄\n"); scanf("%d",&p1->data.age); printf("性别: \n"); scanf("%s",&p1->data.sex); printf("成绩: \n"); scanf("%f",&p1->data.grade); L=NULL; while(p1->data.num! =0) { n=n+1; if(n==1) L=p1; else p2->next=p1; p2=p1; p1=(Linklist)malloc(sizeof(LNode)); printf("请输入学生的数据,学号为零停止: \n学号: \n"); scanf("%d",&p1->data.num); printf("姓名: \n"); scanf("%s",&p1->data.name); printf("年龄\n"); scanf("%d",&p1->data.age); printf("性别: \n"); scanf("%s",&p1->data.sex); printf("成绩: \n"); scanf("%f",&p1->data.grade); } p2->next=NULL; returnL; } voiddisplay(Linklistp) { printf("***************学生信息*****************\n"); printf("学号姓名性别年龄成绩\n"); while(p) { printf("%d\t%s\t%s\t%d\t%f\n",p->data.num,p->data.name,p->data.sex,p->data.age,p->data.grade); p=p->next; } printf("****************************************\n"); } voidmain() { LinklistL,Q,p; printf("首先请先建立一个学生数据单链表再进行其他操作\n"); Q=ListCreat_L(); p=Q; L=Q; printf("现在输出建立的表\n"); display(p); intn; printf("\n请输入任意键进入菜单........\n"); getchar(); for(;;) { printf("***********************菜单******************\n"); printf("1.建立空的单链表\n"); printf("2.建立单链表\n"); printf("3.销毁单链表\n"); printf("4.将单链表置为空表\n"); printf("5.L若为空表返回TRUE,否则返回FLASE\n"); printf("6.返回L中数据元素个数\n"); printf("7.返回L中第i个元素的值\n"); printf("8.返回cur_e的前驱\n"); printf("9.返回cur_e的后驱\n"); printf("10.在i之前插入新元素\n"); printf("11.删除第i个元素\n"); printf("0.结束\n"); printf("***********************************************\n"); printf("请输入你的选择(0~11): \n"); scanf("%d",&n); switch(n) { case1: L=InitList_L(L);break; case2: { printf("现在请重新建立单链表\n"); L=ListCreat_L(); printf("现在输出建立的单链表\n"); display(L); break; } case3: DestroyList_L(L);break; case4: ClearList_L(L);break; case5: ListEmpty_L(L);break; case6: printf("线性表的长度为%d.\n",ListLength_L(Q));break; case7: { inti; printf("请输入查找的数据位序: \n"); scanf("%d",&i); GetElem_L(L,i); break; } case8: { stucur_e; printf("请输入cue_e的学生的学号: \n"); scanf("%d",&cur_e.num); PriorElem_L(L,cur_e); break; } case9: { stucur_e; printf("请输入cue_e的学生的学号: \n"); scanf("%d",&cur_e.num); NextElem_L(L,cur_e); break; } case10: { inti; printf("请输入插入的位序: \n"); scanf("%d",&i); ListInsert_L(L,i); printf("现在输出插入后的单链表\n"); display(L); break; } case11: { inti; printf("请输入需删除元素的位序: \n"); scanf("%d",&i); ListDelete_L(L,i); printf("现在输出删除后的单链表\n"); display(L); break; } case0: exit(0); default: printf("输入数据有误,请重新输入\n"); } } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 建立 学生 信息 结点 单链表 语言版