Skip to content

文件的逻辑结构

考情分析

文件逻辑结构属于文件管理高频考点,在 408 真题中常以选择题形式考查各种文件结构的存取特性。属于 🔥🔥🔥 高频。

同样一堆数据,是当成字节流随便读,还是按记录分门别类地组织?不同的逻辑结构决定了用户能以什么方式、什么效率来存取文件。

逻辑结构 vs 物理结构

文件有两个层面的结构:

  • 逻辑结构:从用户视角看文件的组织方式(本文内容)
  • 物理结构:文件数据在磁盘上的存储方式(下一篇讲解)

逻辑结构影响用户的存取方式,物理结构影响系统的 I/O 效率。两者是独立的——同一种逻辑结构可以映射到不同的物理结构上。

无结构文件(流式文件)

文件内部没有明确的结构,就是一个字节流(byte stream)。

  • 典型例子:.txt 文本文件、二进制可执行文件
  • 存取方式:按字节偏移量定位
  • Unix/Linux 中几乎所有文件都被视为流式文件

有结构文件(记录式文件)

文件由一组**记录(record)组成,每条记录由若干数据项(字段)**构成。记录是文件存取的基本单位。

顺序文件

记录按某种顺序排列,分为两种:

类型排列方式特点
串结构按记录存入的先后顺序排列检索需要逐个查找
顺序结构按关键字递增/递减排列可以使用折半查找

存取特性

操作串结构顺序结构
顺序读取O(n) 遍历O(n) 遍历
按关键字查找O(n) 逐个比较O(log n) 折半查找
插入新记录追加到末尾 O(1)需要移动记录以保持有序
删除记录标记删除或移动需要移动记录

顺序文件的优势

顺序文件是对批量顺序处理效率最高的文件结构。磁带只能顺序存取,因此磁带上的文件只能是顺序文件。

索引文件

为文件中的每条记录建立一个索引项,所有索引项构成索引表。索引表按关键字排序,支持折半查找快速定位。

索引表                        主文件(记录区)
┌───────┬──────┐            ┌─────────────────┐
│关键字  │ 指针 │─────────► │  记录内容...     │
├───────┼──────┤            ├─────────────────┤
│关键字  │ 指针 │─────────► │  记录内容...     │
├───────┼──────┤            ├─────────────────┤
│关键字  │ 指针 │─────────► │  记录内容...     │
└───────┴──────┘            └─────────────────┘
  按关键字排序                 记录可以不连续

特点

  • 支持随机存取和顺序存取
  • 插入/删除只需修改索引表
  • 代价:需要额外空间存储索引表

适用场景:记录长度不等的文件(定长记录没必要用索引,直接算偏移就行)。索引文件就像一本书的目录页——翻目录找到章节对应的页码,直接跳过去,不用从第一页翻起。

索引顺序文件

是顺序文件和索引文件的折中方案——类似字典的部首检字法:先按部首(索引)缩小范围,再在对应的笔画区内顺序查找:

  1. 将所有记录分成若干组
  2. 组内记录可以无序
  3. 建立一个稀疏索引表,每组一个索引项,记录该组的最大关键字和起始位置
索引表(每组一项)          主文件
┌──────┬──────┐         ┌───────────────┐
│ 组1≤15│  →  │────────►│ 组1: 3条记录  │ ← 组内无序
├──────┼──────┤         ├───────────────┤
│ 组2≤30│  →  │────────►│ 组2: 3条记录  │
├──────┼──────┤         ├───────────────┤
│ 组3≤50│  →  │────────►│ 组3: 3条记录  │
└──────┴──────┘         └───────────────┘

检索过程

  1. 在索引表中折半查找,确定记录属于哪个组 — O(log(组数))
  2. 在组内顺序查找目标记录 — O(组大小)

若文件有 N 条记录,分成 √N 组,每组 √N 条,则平均检索长度为 √N,介于顺序文件的 N/2 和索引文件的 log₂N 之间。

多级索引顺序文件

当记录数量非常大时,可以对索引表再建索引,形成多级索引顺序文件。ISAM(索引顺序存取方法)和 VSAM 就是典型实现。

散列文件(Hash 文件)

散列函数将关键字映射到物理存储地址。

  • 检索速度最快:O(1)
  • 不适合顺序存取
  • 存在哈希冲突问题

四种逻辑结构对比

逻辑结构顺序存取随机存取检索效率适用场景
顺序文件最优仅顺序结构支持O(n) 或 O(log n)批量处理、磁带
索引文件支持支持O(log n)变长记录、随机查询
索引顺序文件支持支持O(√N)大量记录的折中方案
散列文件不支持支持O(1)快速单记录查找

考研高频考点

  • 🔥🔥🔥 顺序文件中串结构与顺序结构的区别
  • 🔥🔥🔥 索引顺序文件的检索过程和平均检索长度 √N
  • 🔥🔥 四种逻辑结构各自的存取特性对比
  • 🔥🔥 索引文件的索引表结构及其适用场景(变长记录)
  • 🔥 散列文件的特点(最快但不支持顺序存取)

逻辑结构决定了用户怎么看数据,但数据最终要落到磁盘块上。下一篇来看文件的物理结构——连续放、链式放还是建索引?