您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 严蔚敏版数据结构学生信息带头节点单链表
#includestdio.h#includemalloc.htypedefstructStudent/*定义学生类*/{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-next=NULL;printf(OK\n);}return(L);}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);elseprintf(FLASE\n);}}intListLength_L(LinklistL)/*返回L中数据元素个数*/{inti=0;Linklistp=L;if(!L)return0;else{while(p-next){i++;p=p-next;}returni;}}voidGetElem_L(LinklistL,inti)/*返回第i个元素的值*/{Linklistp=L-next;intj=1;while(p&&ji){p=p-next;++j;}if(!p||ji)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)/*返回cur_e的前驱*/{Linklistp=L;while(p-next&&(p-next-data).num!=cur_e.num)p=p-next;if(!p-next||p==L)printf(ERROR\n);else{printf(cur-e的前驱的数据为:\n);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);}}voidNextElem_L(LinklistL,stucur_e)/*用next_e返回cur_e的后驱*/{Linklistp=L-next;while(p&&(p-data).num!=cur_e.num)p=p-next;if(!p||!p-next)printf(ERROR\n);else{printf(cur-e的后驱的数据为:\n);printf(学号:%d\n姓名:%s\n性别:%s\n年龄:%d\n成绩:%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&&ji-1){p=p-next;++j;}if(!p||ji-1)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&&ji-1){p=p-next;++j;}if(!p||ji-1)printf(ERROR\n);else{q=p-next;p-next=q-next;printf(删除的元素为:\n);printf(学号:%d\n姓名:%s\n性别:%s\n年龄:%d\n成绩:%f\n,q-data.num,q-data.name,q-data.sex,q-data.age,q-data.grade);free(q);printf(OK\n);}}LinklistListCreat_L(intn)/*建立带头结点的单链表*/{LinklistL,s,r;inti;L=(Linklist)malloc(sizeof(LNode));r=L;for(i=0;in;i++){s=(Linklist)malloc(sizeof(LNode));printf(请输入第%d个学生的数据\n学号:\n,i+1);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);r-next=s;r=s;}r-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;intn,i;printf(首先请先建立一个学生数据单链表再进行其他操作\n);printf(要输入的学生数\n);scanf(%d,&i);Q=ListCreat_L(i);p=Q-next;L=Q;printf(现在输出建立的表:\n);display(p);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();printf(现在输出新建的空表:\n);display(L-next);break;}case2:{printf(现在重新建立一个单链表\n);inti;printf(请输入学生人数:\n);scanf(%d,&i);L=ListCreat_L(i);printf(现在输出建立的单链表\n);display(L-next);break;}case3:DestroyList_L(L);break;case4:{ClearList_L(L);printf(清空后为:\n);display(L-next);break;}case5:ListEmpty_L(L);break;case6:printf(线性表的长度为%d.\n,ListLength_L(L));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(现在输出在第%d个元素插入元素后的单链表:\n,i);display(L-next);break;}case11:{inti;printf(请输入需删除元素的位序:\n);scanf(%d,&i);ListDelete_L(L,i);printf(现在输出删除第%d个元素后的单链表:\n,i);display(L-next);break;}case0:exit(0);}}}
本文标题:严蔚敏版数据结构学生信息带头节点单链表
链接地址:https://www.777doc.com/doc-2795561 .html