文件的逻辑结构
廖家龙 用心听,不照做

所谓的“逻辑结构”,就是指在用户看来,文件内部的数据应该是如何组织起来的。而“物理结构”指的是在操作系统看来,文件的数据是如何存放在外存中的(类比于数据结构中的“逻辑结构”、“物理结构”)

无结构文件

文件内部的数据就是一系列二进制流或字符流组成,又称“流式文件”

文件内部的数据其实就是一系列字符流,没有明显的结构特性。因此也不用探讨无结构文件的“逻辑结构”问题

有结构文件

由一组相似的记录组成,又称“记录式文件”,每条记录由若干个数据项组成,一般来说,每条记录有一个数据项可作为关键字(作为识别不同记录的ID)

根据各条记录的长度(占用的存储空间)是否相等,又可分为定长记录和可变长记录两种

根据有结构文件中的各条记录在逻辑上如何组织,可以分为三类:

顺序文件

文件中的记录一个接一个的顺序排列(逻辑上),记录可以是定长的或可变长的。各个记录在物理上可以是顺序存储或链式存储

  • 串结构:记录之间的顺序与关键字无关,通常按照记录存入的时间决定记录的顺序
  • 顺序结构:记录之间的顺序按关键字顺序排列

假设已经知道了文件的起始地址,也就是第一个记录存放的位置

  1. 能否快速找到第i个记录对应的地址?(即能否实现随机存取)

  2. 能否快速找到某个关键字对应的记录存放的位置?

    顺序文件的缺点是增加/删除一个记录比较困难,如果是串结构则相对简单

索引文件

对于可变长记录文件,要找到第i个记录,必须先顺序的查找前i-1个记录,但是很多应用场景中又必须使用可变长记录,如何解决这个问题?

解决了顺序文件不方便增/删记录的问题,同时让不定长记录的文件实现了随机存取,但索引表可能占用很多空间

索引顺序文件(多级索引顺序文件)

索引文件的缺点:每个记录对应一个索引表项,因此索引表可能会很大,比如文件的每个记录平均只占8B,而每个索引表项占32个字节,那么索引表都要比文件内容本身大4倍,这样对存储空间的利用率就太低了