您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 严蔚敏版数据结构建立学生信息无头结点单链表C语言版
#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=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);elseprintf(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&&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)/*用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&&ji-2){p=p-next;++j;}if(!p||ji-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&&ji-2){p=p-next;++j;}if(!p-next||ji-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;elsep2-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);}}}
本文标题:严蔚敏版数据结构建立学生信息无头结点单链表C语言版
链接地址:https://www.777doc.com/doc-2795562 .html