云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 数据结构课程设计多关键字实验报告 - 图文

数据结构课程设计多关键字实验报告 - 图文

  • 62 次阅读
  • 3 次下载
  • 2026/1/9 22:27:57

数据结构课程设计报告 第 4 页,共 页

多关键字排序系统 取得考生信息的方式 手动输入 从文件读取 考姓各 号 名 科 成 绩 三 详细设计 查询 各种排序 按考号查询 按姓名查询 总分相同按语文成绩排序 总分相同按英语成绩排序 总分相同按数学成绩排序 总分相同按综合成绩排序 1.存储文件的书写 void read(SLList *l) 2.考生信息输入 SLList * Creat() 3.查找函数 void search(SLList *l) 4.链式基数排序 void Distribute(SLCell *r,int i,int *f,int *e)/*以下标为i的关键字为准做一趟分配*/ { int j,p; for(j=RADIX-1;j>=0;--j)//将RADIX个队列初始化为空队列 f[j]=0; for(p=r[0].next;p;p=r[p].next) { j=r[p].keys[i]; if(!f[j])//将下标p所指的节点插入第j个队列中 f[j]=p; else r[e[j]].next=p; e[j]=p; } } 数据结构课程设计报告 第 5 页,共 页

void Collect(SLCell *r,int i,int *f,int *e)/*收集*/ { int j,t; for(j=RADIX-1;!f[j];j--);//找第一个非空队列 r[0].next=f[j]; t=e[j]; while(j>=0) { for(j--;j>0&&!f[j];j--);//找下一个非空队列 if(f[j]&&j>=0) { r[t].next=f[j]; t=e[j]; }//链接两个非空队列 } r[t].next=0;//t指向最后一个非空队列中的最后节点 } /*对*l中的成绩做链式基数排序,链表的记录按从小到大的顺序连接*/ void RadixSortChinese(SLList *l)//语文 { int f[101],e[101]; int i; for(i=0;irecnum;i++) l->r[i].next=i+1; l->r[l->recnum].next=0; for(i=3;i>0;--i) { Distribute(l->r,i,f,e); Collect(l->r,i,f,e); } } void RadixSortMaths(SLList *l)//数学 { int f[101],e[101]; int i; for(i=0;irecnum;i++) l->r[i].next=i+1; l->r[l->recnum].next=0; for(i=1;i<3;++i) { Distribute(l->r,i,f,e); Collect(l->r,i,f,e); } } void RadixSortEnglish(SLList *l)//英语 数据结构课程设计报告 第 6 页,共 页

{ int f[101],e[101]; int i; for(i=0;irecnum;i++) l->r[i].next=i+1; l->r[l->recnum].next=0; for(i=1;i<4;++i) { Distribute(l->r,i,f,e); Collect(l->r,i,f,e); } } void RadixSortzonghe(SLList *l)//综合 { int f[101],e[101]; int i; for(i=0;irecnum;i++) l->r[i].next=i+1; l->r[l->recnum].next=0; for(i=1;i<5;++i) { Distribute(l->r,i,f,e); Collect(l->r,i,f,e); } } void RadixSortTotal(SLList *l)//对总分排序 { SLCell *r; r=l->r; int f[401],e[401]; int j,p,t; for(j=400;j>=0;--j) f[j]=0; for(p=r[0].next;p;p=r[p].next) { j=r[p].keys[0]; if(!f[j]) f[j]=p; else r[e[j]].next=p; e[j]=p; } for(j=400;!f[j];j--); r[0].next=f[j]; t=e[j]; while(j>=0) 数据结构课程设计报告 第 7 页,共 页

{ for(j--;j>0&&!f[j];j--); if(f[j]&&j>=0) { r[t].next=f[j]; t=e[j]; } } r[t].next=0; } void ShowRank(SLList *l)//按名次顺序输出考生名次 学号 姓名 总分 语文 数学 英语 综合分数 { int rank=1,i; cout <<\名次 考号 名字 总分 语文 数学 英语 综合\ for(i=l->r[0].next;rank<=l->recnum;rank++) { cou<r[i].number<r[i].name; cout<r[i].keys[0]; cout <r[i].keys[1]<r[i].keys[2]; cout <r[i].keys[3]<r[i].keys[4]<r[i].next; } } 四 设计与调试分析 刚开始的时候我设计了文件的插入、删除、修改、查询等功能,后来我用了静态链表存储,同时在文件读取的时候我设置了每次读取的最大值为10所以在插入、删除之后就出现了乱码的情况,所以我就放弃了插入、删除的功能,只写了查询的功能。在写查询的时候我本来想用两个子函数和一个查找主函数的,可是后来在主函数中用switch语句调用两个子函数出错。后来我把函数写在switch语句中就对了。在选择功能界面和排序界面时也出错了,一开始我用的是switch语句套在switch语句中,总是出现错误,而且检查不出来。后来我把套在里面的switch语句写在另外一个函数里,然后再调用这样就没有错误了。写文件的时候把值直接赋给指针了,所以导致我一直出错,后来进过看书弄懂了。链式基数排序的程序是按照书上的写的,所以没什么大问题。 五 用户手册 一.主界面:1手动输入考生成绩进行排序2显示文件中已经存储的考生成绩信息3各种查询考生成绩信息4各种排序5输出排序后的考生成绩信息6.退出 二.选择1,进入手动输入考生成绩信息界面:依次分别输入考生考号、姓名、语文、数学、英语、综合,输入完成按回车键。若想继续输入按1,不再输入按0。 二.选择2,进入显示考生信息界面(从文件中读取考生成绩信息) 三.选择3,进入查询界面:1按考号查找2按姓名查找 四.选择4,进入排序界面:1总分相同时按语文成绩排序2总分相同时按英语成绩排序3总分相同

  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

数据结构课程设计报告 第 4 页,共 页 多关键字排序系统 取得考生信息的方式 手动输入 从文件读取 考姓各 号 名 科 成 绩 三 详细设计 查询 各种排序 按考号查询 按姓名查询 总分相同按语文成绩排序 总分相同按英语成绩排序 总分相同按数学成绩排序 总分相同按综合成绩排序 1.存储文件的书写 void read(SLList *l) 2.考生信息输入 SLList * Creat() 3.查找函数 void search(SLList *l) 4.链式基数排序 void Distribute(SLCell *r,int i,int *f,int *e)/*以下标为i的关键字为准做一趟分配*/ { int j,p; for(j=RADIX-1;j>=0;--

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com