- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
c程序链表实现排序删除课件.ppt
总结 该题涉及功能繁琐; 链表数据处理问题较多; 难度较大; pnode create_list() { int m=0,i,j,r; Head=GetData(); printf(\n); for(i=0;iStudent;i++) /*给小组的每一个人编号*/ Mark[i]=i; for(i=0; iStudent; i++) /*打乱编号*/ { r=rand()%(Student-i); Mark1[m++]=Mark[r]; for(j=r;jStudent;j++) Mark[j]=Mark[j+1]; } m=0; pnode head=(pnode)malloc(sizeof(node)); //分配不存有效数据的头结点 pnode tail=head; tail-pnext=NULL; printf(请输入你想抽取的学生人数 N: ); scanf(%d,N); for(i=0;iN;i++) { pnode pnew=(pnode)malloc(sizeof(node)); //申请空间存储新节点 strcpy(pnew-name,Head[Mark1[m]].Name); strcpy(pnew-snum,Head[Mark1[m++]].Snum); tail-pnext=pnew; pnew-pnext=NULL; tail=pnew; } /* 当前末尾指向新元素,tail=pnew;新元素的地址变成新末尾*/ return head; } 模块函数部分—— 创建链表并随机取N的函数; 原信息依次编号后随机打乱重新编号实现间接的随机抽取人数; 依次将打乱后新的序号信息从开始往后取N个复制到链表中作为随机抽取的N个学生; void traverse_list(pnode phead) { pnode p= phead-pnext; //将头结点的指针给临时指针p printf(学生信息为:\n\n); while(p!=NULL) { printf(\t%-8s%s\n,p-name,p-snum); p=p-pnext; } printf(\n); } 模块函数部分—— 遍历链表并输出信息的函数; int length_list(pnode phead) { int len=0; pnode p=phead-pnext; //将头结点的指针给临时指针p while(p!=NULL) { len++; p=p-pnext; } return len; } 模块函数部分—— 求链表长度的函数; void sort_list(pnode phead) { int i,j,len; char num[20],name[20]; pnode q; len=length_list(phead); for(i=0;ilen-1;i++) { for(j=0,q=phead-pnext;jlen-1-i;q=q-pnext,j++) if(strcmp(q-snum,q-pnext-snum)0) { strcpy(num,q-snum); strcpy(q-snum,q-pnext-snum); strcpy(q-pnext-snum,num); strcpy(name,q-name); strcpy(q-name,q-pnext-name); strcpy(q-pnext-name,name); } } } 模块函数部分—— 按学号大小正排序的函数; 在该函数中调用了求链表长度的函数; 冒泡法()实现 正排序,字符串数组内容作为temp复制给链表 void sort_list(pnode phead) { int i,j,len; char num[20],name[20]; pnode q; len=length_list(phead);
文档评论(0)