学科分类
目录
数据结构

多重表文件

多重表文件是将索引方法和链接方法相结合的一种组织方式。它的具体组织方式如下:对每个需要查询的次关键字建立一个索引,同时将具有相同次关键字的记录链接成一个链表,并将此链表的头指针、链表长度及次关键字,作为索引表的一个索引项。通常多重表文件的主文件是一个顺序文件。

例如,传智播客每个学科每个月都会开班,那么现在以各学科开班情况为数据建立一个多重表文件,主关键字为学科,次关键字是班编号、校区,如表1所示。

表1 多重表文件

物理地址 学科 学科编号 人数 班级编号 (按月份) 校区 班级链 校区链
1 C/C++ 001 200 03 北京 3 7
2 JAVA 002 196 06 武汉 ^ 5
3 IOS 003 206 03 南京 ^ ^
4 ANDROID 004 200 05 哈尔滨 6 ^
5 PHP 005 190 07 武汉 7 ^
6 UI 006 240 05 深圳 ^ ^
7 网络营销 007 120 07 北京 ^ ^

该文件有两个次关键字,它设有两个链接字段,分别将同一月份开班(班级编号)的和相同校区的记录链接在一起,由此形成班级编号索引和校区索引,分别如表2、3所示。

表2 班级编号索引

次关键字 头指针 链长
03 1 2
05 4 2
06 2 1
07 5 2

表3 校区索引

次关键字 头指针 链长
北京 1 2
武汉 2 2
南京 3 1
哈尔滨 4 1
深圳 6 1

将次关键字相同的记录链接在一起,如在多重表文件中,相同班级编号的记录链接在一起,在班级链中,物理地址为1的记录班级编号为03,这一条记录的班级链为3,表明下一条班级编号为03的记录是存储在物理地址3处,这样就将相同记录链接起来了。

在多重表文件中检索,可进行单关键字简单查询,也可进行多关键字组合查询。

单关键字简单查询是按给定值,在对应次关键字索引表中找到对应索引项,从头指针出发,列出该链表上所有记录。例如在表1中查询所有3月份开班的学科,则只需要在班级编号索引表中先找到次关键字03,然后从它的头指针出发,列出该链表上所有的记录即可。

多关键字组合查询,例如要查询北京校区3月份开班的学科,则既可以从班级编号索引表的头指针出发查找,也可以从校区索引表的头指针出发查找,读出链表上的每个记录,判定它是否满足查询条件。

注意,在查找同时满足多个关键字条件的记录时,可先比较多个索引链表的长度,然后选择较短的链表进行查找。

在多重表文件中插入新记录时,如果不要求保持链表的某种次序,则可将新记录插在链表的头指针之后;但删除记录时比较烦琐,需要在每个关键字的链表中删去该记录。

点击此处
隐藏目录