数据结构实践——索引文件

发布时间:2017-09-09 10:53:30
数据结构实践——索引文件

【项目】索引文件
有若干学生的成绩数据如下,将这些数据保存到st数组中:

学号 姓名 年龄 性别 语文 数学 英语 1 陈华 20 男 78 90 84 5 张明 21 男 78 68 92 8 王英 20 女 86 81 86 3 刘丽 21 女 78 92 88 2 许可 20 男 80 83 78 4 陈军 20 男 78 88 82 7 马胜 21 男 56 67 75 6 曾强 20 男 78 89 82

基于这些数据,编程序实现下面的功能:
(1)将st数组中学生记录写入stud.dat文件作为主文件
(2)输出主文件中的学生记录
(3)建立与主文件相对应的索引文件,其中每个记录由两个字段组成:学号和该学生记录在数据文件中的位移量(例:上面列出数据中学号为2的学生许可,其位移量是5。由于本例用定长文件,可以根据位移量计算记录在主文件中的相对地址)。索引文件按学号有序。
(4)输出索引文件中的全部记录
(5)根据用户输入的学号,利用索引文件,用二分查找法找到对应的记录号,再通过主文件输出该记录
(6)是否有想法,将这个项目再扩充了?加大数据量、哈希文件、多关键字文件……

[参考解答]

#include #include #include #define MaxRec 100 //最多的记录个数 typedef struct Index //定义索引文件结构 { int no; //学号 long offset; //主文件中的记录号 } Index; typedef struct { int no; //学号 char name[10]; //姓名 int age; //年龄 char sex[3]; //性别 int deg1,deg2,deg3; //课程1-课程3成绩 } StudType; void InsertSort(Index R[],int n) //采用直接插入排序法对R[0..n-1]按学号递增排序 { int i,j; Index temp; for (i=1; i=0 && temp.no<r[j].no) {="" r[j+1]="R[j];" 将关键字大于r[i].key的记录后移="" j--;="" }="" 在j+1处插入r[i]="" void="" creatidxfile()="" 建立索引文件="" file="" *mfile,*idxfile;="" index="" idx[maxrec];="" studtype="" st;="" int="" n="0,i;" if="" ((mfile="fopen(&quot;stud.dat&quot;,&quot;rb&quot;))==NULL)" printf("="" 提示:不能打开主文件\n");="" return;="" ((idxfile="fopen(&quot;index.dat&quot;,&quot;wb&quot;))==NULL)" 提示:不能建立索引文件\n");="" i="0;" while="" ((fread(&st,sizeof(studtype),1,mfile)))="" idx[i].no="st.no;" idx[i].offset="++n;" i++;="" insertsort(idx,n);="" 对idx数组按no值排序="" rewind(idxfile);="" for="" (i="0;" ino)="" high="mid-1;" else="" (idx[mid].no

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:湖北网站建设 http://hubei.45qun.com

上一篇:Builder模式
下一篇:最后一页