数据结构实验源代码

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1数据结构实验源代码第二章线性表标题:约瑟夫环描述:约瑟夫环编号为1,2,3,……,n的n个人按顺时针方向围坐一圈。任选一个正整数作为报数上限m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。报m的人出列,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。设计程序输出出列顺序。输入:人数n报数上限m人员记录1(格式为:姓名学号性别年龄班级健康状况)人员记录2…人员记录n输出:第1次报数出列的人员记录第2次报数出列的人员记录…第n次报数出列的人员记录输入样例:53安弥邵10000001女28计43一般宰觅10000002男23计79健康顾健10000003男27计29一般宓顽芳10000004女20计17健康能纸垄10000005男18计11健康输出样例:顾健10000003男27计29一般安弥邵10000001女28计43一般能纸垄10000005男18计11健康宰觅10000002男23计79健康宓顽芳10000004女20计17健康提示:循环表#includestring.h#includectype.h#includemalloc.h//malloc()等#includelimits.h//INT_MAX等#includestdio.h//EOF(=^Z或F6),NULL#includestdlib.h//atoi()#includeio.h//eof()#includemath.h//floor(),ceil(),abs()#includeprocess.h//exit()2//函数结果状态代码#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1//#defineOVERFLOW-2因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedefintStatus;//Status是函数的类型,其值是函数结果状态代码,如OK等typedefintBoolean;//Boolean是布尔类型,其值是TRUE或FALSEstructstud{charname[12];charnum[12];charsex[4];intage;charclas[10];charhealth[16];};typedefstudElemType;typedefstructLNode{ElemTypedate;structLNode*next;}LNode,*LinkList;voidCreateList2(LinkList&L,intn){//正位序(插在表尾)输入n个元素的值,建立带表头结构的单链线性表inti;LinkListp,q;L=(LinkList)malloc(sizeof(LNode));//生成头结点q=L;scanf(%s%s%s%d%s%s,L-date.name,L-date.num,L-date.sex,&L-date.age,L-date.clas,L-date.health);for(i=1;in;i++){p=(LinkList)malloc(sizeof(LNode));scanf(%s%s%s%d%s%s,p-date.name,p-date.num,p-date.sex,&p-date.age,p-date.clas,p-date.health);q-next=p;3q=q-next;}p-next=L;}voidrun(LinkListL,intm){inti;LinkListp,q;p=L;while(p){for(i=1;im;i++){q=p;p=p-next;}printf(%s%s%s%d%s%s\n,p-date.name,p-date.num,p-date.sex,p-date.age,p-date.clas,p-date.health);q-next=p-next;free(p);p=q-next;if(p==p-next){break;}}printf(%s%s%s%d%s%s,p-date.name,p-date.num,p-date.sex,p-date.age,p-date.clas,p-date.health);printf(\n);free(p);//要将P释放掉,应为在前面L已经被释放掉}intmain(){intn,m;LinkListLa;标题:学生信息管理4描述:用链式存储结构实现对一个班级学生信息管理。设计程序求出每个人的平均成绩并按平均成绩由高到底排序后输出学生记录。输入:人数n人员记录1(格式为:学号姓名成绩1成绩2成绩3)人员记录2输出:人员记录x1人员记录y2…人员记录zn输入样例:31孙俪莉7678892章子怡7256673刘德华568490输出样例:1孙俪莉76788981.0013刘德华56849076.6722章子怡72566765.003#includestdio.h#includestdlib.h#defineMaxSize1000typedefstructStudent{longnum;charname[10];floatscore_1;floatscore_2;floatscore_3;floatave_score;longrank;}StudentType;typedefStudentTypeDataType;typedefstructNode{DataTypedata;structNode*next;}SLNode;voidListInitiate(SLNode**L){if((*L=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);(*L)-next=NULL;}5intListInsert(SLNode*L,inti,DataTypex){SLNode*p,*q;intj;p=L;j=0;while(p-next!=NULL&&ji-1){p=p-next;j++;}if(j!=i-1){printf(error);return0;}if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q-data=x;q-next=p-next;p-next=q;return0;}voidRanking(SLNode*L){SLNode*p,*q,*s;longi=0;p=L;while(p-next!=NULL){p=p-next;p-data.ave_score=(p-data.score_1+p-data.score_2+p-data.score_3)/3;i++;}p=L;while(i--){p=L;s=p;p=p-next;q=p-next;while(p-next!=NULL){if(p-data.ave_scoreq-data.ave_score){if(q-next!=NULL)p-next=q-next;elsep-next=NULL;q-next=p;s-next=q;q=p-next;s=s-next;}else//后移{s=p;p=p-next;q=p-next;}}}p=L;i=1;while(p-next!=NULL){p=p-next;p-data.rank=i++;6}}voidDestroy(SLNode**L){SLNode*p,*p1;p=*L;while(p!=NULL){p1=p;p=p-next;free(p1);}*L=NULL;}intmain(void){SLNode*L,*p;StudentTypex[MaxSize];intn;inti;ListInitiate(&L);p=L;scanf(%d,&n);//班级人数for(i=1;i=n;i++){scanf(%ld,&x[i].num);scanf(%s,x[i].name);scanf(%f,&x[i].score_1);scanf(%f,&x[i].score_2);scanf(%f,&x[i].score_3);ListInsert(L,i,x[i]);}Ranking(L);while(p-next!=NULL){p=p-next;printf(%ld,p-data.num);printf(%s,p-data.name);printf(%.2f,p-data.score_1);printf(%.2f,p-data.score_2);printf(%.2f,p-data.score_3);printf(%.2f,p-data.ave_score);printf(%ld\n,p-data.rank);}Destroy(&L);return0;}标题:链表上的基本操作实现描述:在单链表存储结构上实现基本操作:初始化、创建、插入、删除、查找、遍历、逆置、合并运算。输入:线性表长度na1a2a3...an(数值有序,为降序)要插入到线性表中的数字x和插入的位置i要删除的数字的位置i要查找的数字x线性表长度mb1b2...bm(数值有序,为升序)7输出:创建的线性表a1a2...an插入一个数字后的线性表a1a2...an+1删除一个数字后的线性表a1a2...an查找一个输入的数字后如果找到,输出该数字的位置i,如果没有找到,输出“没有找到x”的信息。逆置a1a2...an后的线性表anan-1...a1合并两个线性表后的线性表输入样例:请输入线性表La的长度:6请输入线性表La中的元素:151310985请输入要插入到线性表La中的数字x和要插入的位置:76线性表La=1513109875(输出)请输入要删除的数字的位置:4线性表La=151310875(输出)请输入要查找的数字:10找到,10在第3个位置逆置线性表La=578101315请输入线性表Lb的长度:4请输入线性表Lb中的元素:1369合并La和Lb后的线性表为:1356789101315#includestdio.h#includestdlib.h#defineOK1#defineERROR0#defineOVERFLOW-2typedefintElemType;typedefintStatus;#defineLIST_INIT_SIZE4//线性表存储空间的初始分配量#defineLISTINCREMENT2//线性表存储空间的分配增量structSqList{ElemType*elem;//存储空间基址intlength;//当前长度intlistsize;//当前分配的存储容量(以sizeof(ElemType)为单位)}Sqlist;StatusInitList_Sq(SqList&L){//操作结果:构造一个空的顺序线性表L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(OVERFLOW);//存储分配失败L.length=0;//空表长度为0L.listsize=LIST_INIT_SIZE;//初始存储容量returnOK;}StatusListInsert_Sq(SqList&L,inti,ElemTypee){//初始条件:顺序线性表L已存在,1≤i≤ListLength(L)+1//操作结果:在L中第i个位置之前插入新的数据元素e,L的长度加1ElemType*newbase,*q,*p;if(i1||iL.length+1)//i值不合法returnERROR;if(L.length=L.listsize)//当前存储空间已满,增加分配{8if(!(newbase=(ElemType*)realloc

1 / 62
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功