資料結構實踐 索引檔案

2021-07-08 18:27:21 字數 2823 閱讀 5949

本文是針對[資料結構基礎系列(11):檔案]中的實踐專案。

【專案】索引檔案

有若干學生的成績資料如下,將這些資料儲存到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 //定義索引檔案結構

index;

typedef

struct

studtype;

void insertsort(index r,int n) //採用直接插入排序法對r[0..n-1]按學號遞增排序

r[j+1]=temp; //在j+1處插入r[i]

}}void creatidxfile() //建立索引檔案

if ((idxfile=fopen("index.dat","wb"))==null)

i=0;

while ((fread(&st,sizeof(studtype),1,mfile)))

insertsort(idx,n); //對idx陣列按no值排序

rewind(idxfile);

for (i=0; isizeof(index),1,idxfile);

fclose(mfile);

fclose(idxfile);

}void outputmainfile() //輸出主檔案全部記錄

printf(" ----學生成績表----\n");

printf("記錄號 學號 姓名 年齡 性別 語文 數學 英語\n");

while ((fread(&st,sizeof(studtype),1,mfile))==1)

fclose(mfile);

}void outputidxfile() //輸出索引檔案全部記錄

while ((fread(&irec,sizeof(index),1,idxfile))==1)

printf("\t%5d%6ld\n",irec.no,irec.offset);

fclose(idxfile);

}void readindexfile(index idx[maxrec],int &n) //讀索引檔案資料存入idx陣列中

fseek(idxfile,0,2);

j=ftell(idxfile); //j求出檔案長度

rewind(idxfile);

n=j/sizeof(index); //n求出檔案中的記錄個數

fread(idx,sizeof(index),n,idxfile);

fclose(idxfile);

}int searchnum(index idx,int n,int no) //在含有n個記錄的索引檔案idx中查詢學號為no的記錄對應的記錄號

return -1;

}void findstudent() //輸出指定學號的記錄

readindexfile(idx,n); //讀取索引陣列idx

printf("輸入學號:");

scanf("%d",&no);

i=searchnum(idx,n,no); //在idx中查詢

if (i==-1)

else

fclose(mfile);

}void writefile(studtype st, int n) //將st陣列中的n個學生記錄寫入stud.dat檔案中

for (i=0; i1,sizeof(studtype),fp);

fclose(fp);

}int main()

, ,,,

,,,};

printf("建立主檔案\n");

writefile(st,n); //建立主檔案

do

}while (sel!=0);

return

0;}

3 解析索引檔案結構(1)

webus2.0 in action 解析索引檔案結構 2 webus的索引資料全部儲存在一種抽象的目錄結構中,它既支援實際物理目錄,也支援以流 system.io.stream 作為資料載體的邏輯目錄 為了實現這個功能,webus2.0 sdk在 webus.io 命名空間中提供了三個實用工具類 ...

索引檔案構成

1 索引檔案 索引檔案由主檔案和索引表構成。主檔案 檔案本身。索引表 在檔案本身外建立的一張表,它指明邏輯記錄和物理記錄之間的一一對應關係。2 索引表組成 索引表必須按主關鍵字有序,而主檔案本身則可以按主關鍵字有序或無序。3 索引順序檔案和索引非順序檔案 1 索引順序檔案 indexed seque...

談談索引檔案

本來是去查b tree的,翻到了索引檔案,看了兩眼,備忘一下吧。什麼是索引檔案?除了檔案本身 即資料區 之外,另建立一張表只是邏輯記錄和物理記錄之間的意義對應關係的表 索引表,這類包括檔案資料區和索引錶兩大部分的檔案叫做索引檔案。索引表示由系統自動生成的,在記錄輸入建立資料區的同時建立乙個索引表,按...