c程序-链表实现排序删除.ppt

c程序-链表实现排序删除

总结 该题涉及功能繁琐; 链表数据处理问题较多; 难度较大; 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)

1亿VIP精品文档

相关文档