日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

数据结构源码笔记(C语言):索引文件建立和查找

發(fā)布時(shí)間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构源码笔记(C语言):索引文件建立和查找 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
//實(shí)現(xiàn)索引文件建立和查找算法#include<stdio.h> #include<malloc.h> #include<string.h> #include<stdlib.h>#define MaxRec 100//最多的記錄個(gè)數(shù)typedef struct Index //定義索引文件結(jié)構(gòu) {char num[8];//學(xué)號(hào)long offset;//主文件中的記錄號(hào) }Index;typedef struct sdata//定義主文件結(jié)構(gòu) {char num[8];char name[10];int sex;int age;char addr[30];char dep[20];char spec[20]; }Student;void DelAll()//清除主文件和索引文件的全部記錄 {FILE *mfile,*idxfile;if((mfile=fopen("main.dat","wb"))==NULL){printf(">>不能打開主文件\n");return;}if((idxfile=fopen("idx.dat","wb"))==NULL){printf(">>不能打開索引文件\n");return;}fclose(mfile);fclose(idxfile); }void InsertSort(Index r[],int n)//對(duì)r[0......n-1]按遞增有序進(jìn)行直接插入排序 {int i,j;Index temp;for(i=1;i<n;i++){temp=r[i];j=i-1;while(j>=0 && strcmp(temp.num,r[j].num)<0){r[j+1]=r[j];//將關(guān)鍵字大于r[i].key的記錄后移j--;}r[j+1]=temp;//在j+1處插入r[i]} }void CreatIdxFile()//建立索引文件 {FILE *mfile ,*idxfile;Index idx[MaxRec];Student st;int n=0,i;if((mfile=fopen("main.dat","rb"))==NULL){printf(">>不能打開主文件\n");return;}if((idxfile=fopen("index.dat","wb"))==NULL){printf(">>不能建立索引文件\n");return;}i=0;while((fread(&st,sizeof(Student),1,mfile))!=NULL){strcpy(idx[i].num,st.num);idx[i].offset=++n;i++;}InsertSort(idx,n);//對(duì)idx數(shù)組按no域值排序rewind(idxfile);for(i=0;i<n;i++)fwrite(&idx[i],sizeof(Index),1,idxfile);fclose(mfile);fclose(idxfile); }void InputMainFile()//添加一個(gè)主文件記錄 {FILE *mfile;Student st;mfile=fopen("main.dat","ab+");if(mfile==NULL){printf(">>不能建立主文件\n");return;}printf(">>學(xué)號(hào),姓名,性別,年齡,地址,系別,專業(yè):");scanf("%s%s%d%d%s%s%s",st.num,st.name,&st.sex,&st.age,st.addr,st.dep,st.spec);if(fwrite(&st,sizeof(Student),1,mfile)!=1){printf(">> 寫主文件錯(cuò)誤\n");return;}fclose(mfile); }void OutputMainFile()//輸出主文件全部記錄 {FILE *mfile;Student st;int i=0;mfile=fopen("main.dat","rb");if(mfile==NULL){printf(">>不能讀主文件\n");return;}while((fread(&st,sizeof(Student),1,mfile))!=NULL){printf(">> 記錄號(hào)%d:",++i);printf("%s%s%d%d%s%s%s\n",st.num,st.name,st.sex,st.age,st.addr,st.dep,st.spec);}fclose(mfile); }void OutputIdxFile()//輸出索引文件全部記錄 {FILE *idxfile;Index irec;int i=0;idxfile=fopen("index.dat","rb");if(idxfile==NULL){printf(">>不能讀索引文件\n");return;}while((fread(&irec,sizeof(Index),1,idxfile))!=NULL)printf(">>(學(xué)號(hào):記錄號(hào))%s: %d\n",irec.num,irec.offset);fclose(idxfile); }void ReadIndexFile(Index idx[MaxRec],int &len)//讀索引文件數(shù)據(jù)存入idx數(shù)組中 {FILE *idxfile;int j;if((idxfile=fopen("index.dat","rb"))==NULL){printf(">>索引文件不能打開\n");return;}fseek(idxfile,0,2);j=ftell(idxfile);len=j/sizeof(Index);fread(idx,sizeof(Index),len,idxfile);fclose(idxfile); }int SearchNum(Index idx[],int len,char no[])//在索引文件中查找no對(duì)應(yīng)的記錄號(hào) {int mid,low ,high,comp;low=0;high=len-1;while(low<=high){mid=(low+high)/2;comp=strcmp(idx[mid].num,no);if(comp>0)high=mid-1;else if(comp<0)low=mid+1;else return idx[mid].offset;}return -1; }void FindStudent() {FILE *mfile;char no[8];Index idx[MaxRec];Student st;int i,len;mfile=fopen("main.dat","rb+");if(mfile==NULL){printf(">>主文件中沒有任何記錄\n");return;}ReadIndexFile(idx,len);//讀索引數(shù)組idxprintf("輸入學(xué)號(hào):");scanf("%s",no);i=SearchNum(idx,len,no);//在idx中查找if(i==-1)printf(">>學(xué)號(hào) %s 不存在\n",no);else{fseek(mfile,(i-1)*sizeof(Student),SEEK_SET);//由序號(hào)直接跳到主文件的這個(gè)記錄fread(&st,sizeof(Student),1,mfile);printf(">>%s%s%d%d%s%s%s\n",st.num,st.name,st.sex,st.age,st.age,st.dep,st.spec);}fclose(mfile); }int main() {int sel;do{printf("1:輸入 2:輸入主文件 3:輸出索引文件 4:按學(xué)號(hào)查找 9:全清 0:退出:");scanf("%d",&sel);switch(sel){case 9:DelAll();case 1:InputMainFile();CreatIdxFile();break;case 2:OutputMainFile();break;case 3:OutputIdxFile();break;case 4:FindStudent();break;}}while(sel!=0);return 0; }

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言描述)匯總:

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):英文單詞按字典序排序的基數(shù)排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):直接插入排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):直接選擇排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):置換-選擇算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):Huffman樹字符編碼

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):Josephus問題之順序表

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):Josephus問題之循環(huán)鏈接表

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):多項(xiàng)式合并

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二叉樹之葉子結(jié)點(diǎn)旋轉(zhuǎn)銷毀

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):哈夫曼樹

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):集合的位向量表示

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):鏈接隊(duì)列

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):鏈接棧

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):線性表的單鏈表示

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):線性表的順序表示

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):棧的基本操作

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):中綴表達(dá)式

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):希爾插入排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):索引文件建立和查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):冒泡排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):快速排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):可變長(zhǎng)度字符串的快速排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):基數(shù)排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二路歸并排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):堆排序

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二叉樹搜索樹Kruskal

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二叉搜索樹Prim

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):最短路徑弗洛伊德算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):深度、廣度優(yōu)先生成樹

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):鄰接矩陣轉(zhuǎn)化鄰接表

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):統(tǒng)計(jì)字符串中出現(xiàn)的字符及其次數(shù)

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):順序查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):哈希表的相關(guān)運(yùn)算算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):分塊法查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二分查找

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二叉樹遍歷

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二叉平衡樹的相關(guān)操作算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):二叉排序樹的基本操作算法

數(shù)據(jù)結(jié)構(gòu)源碼筆記(C語(yǔ)言):B樹的相關(guān)運(yùn)算算法

總結(jié)

以上是生活随笔為你收集整理的数据结构源码笔记(C语言):索引文件建立和查找的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。