首页/操作系统/04-file/文件的逻辑结构 🔗 在 Obsidian 中打开
操作系统 · 04-file

文件的逻辑结构

重要度 ⭐⭐⭐⭐ 难度 ⭐⭐⭐考查频率 高 操作系统/文件管理逻辑结构顺序文件索引文件索引顺序文件
速查
逻辑结构是从用户视角看到的文件组织:无结构文件(字节流)vs 有结构文件(记录式)。有结构又可分 顺序文件索引文件索引顺序文件。同一逻辑结构可有不同物理存储方式。

速查

项目
定义文件中记录的逻辑组织方式(用户视角)
分类无结构文件(流式)vs 有结构文件(记录式)
有结构文件顺序文件、索引文件、索引顺序文件、散列文件
与物理结构区别逻辑结构面向用户,物理结构面向存储

核心概念

文件的逻辑结构是从用户角度看到的文件组织形式,与物理存储方式相互独立。

无结构文件(流式文件)

  • 由一串字节流组成,没有记录的概念。
  • UNIX/Linux 中所有文件都是流式文件
  • 灵活性高,但不方便查找特定数据。

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

由一组记录组成,每条记录包含若干数据项。

1. 顺序文件

  • 记录按某个关键字顺序排列
  • 串结构:按存入先后排列,无序;顺序结构:按关键字排序。
  • 优点:顺序读取快;缺点:查找慢(需遍历),增删需移动记录。

2. 索引文件

  • 为文件建立索引表,含关键字和记录指针。
  • 先查索引表,再读记录,随机访问快($O(\log n)$)。
  • 缺点:索引表占用额外空间。

3. 索引顺序文件

  • 将记录分组,组间有序、组内可无序,每组建一个索引项。
  • 综合顺序文件与索引文件的优点,查找效率约 $O(\sqrt{n})$。

关键性质

逻辑结构查找方式查找效率适用场景
顺序文件(串结构)顺序遍历$O(n)$日志文件
顺序文件(顺序结构)顺序 / 折半$O(\log n)$批处理
索引文件查索引表$O(\log n)$随机访问
索引顺序文件先索引再组内遍历$O(\sqrt{n})$大文件

常见考法

考法解题套路
逻辑结构分类无结构(流式)vs 有结构(记录式)
顺序文件特点顺序读写快,随机查找慢
索引文件特点随机访问快,但索引表占空间
逻辑 vs 物理结构逻辑结构面向用户,物理结构面向磁盘存储

易错点

注意
  • 逻辑结构是用户视角的文件组织,物理结构是存储视角——两者独立。
  • UNIX 中所有文件都是流式文件(无结构),由字节序列组成。
  • 顺序文件的"顺序"指记录的排列顺序,不是存储的物理位置。
  • 索引文件的缺点是索引表占用额外空间——不是存储空间不足。
  • 索引顺序文件查找效率 $O(\sqrt{n})$——比顺序文件 $O(n)$ 好,比索引文件 $O(\log n)$ 差。

核心结论

必背
  1. 文件逻辑结构分无结构(流式)和有结构(记录式)两类。
  2. 顺序文件适合顺序访问,索引文件适合随机访问。
  3. 索引顺序文件是顺序文件和索引文件的折中。
  4. UNIX/Linux 中所有文件都是流式文件(无结构)。
  5. 逻辑结构和物理结构独立——同一逻辑结构可有不同物理存储方式。

记忆卡片

文件逻辑结构的两大类?
无结构文件(流式,字节序列)和有结构文件(记录式)。
顺序文件的特点?
顺序读写快,但随机查找慢(需遍历)。
索引文件的特点?
随机访问快($O(\log n)$),但索引表占额外空间。
索引顺序文件的查找效率?
$O(\sqrt{n})$——先查索引定位组,再组内遍历。
逻辑结构和物理结构的区别?
逻辑结构面向用户(记录组织),物理结构面向磁盘(块分配)。

交互动画 · 三种有结构文件的查找路径

第 0 步
记录按关键字顺序排列,查找需顺序遍历 记录 R1 记录 R2 记录 R3 记录 R4 … 查找关键字 K:从头遍历匹配失败时最坏需扫全部 n 条记录 先查索引表(关键字 → 指针),再读目标记录 索引表 K1 → 地址 A K2 → 地址 B 记录(地址 A) 记录(地址 B) 按关键字查索引 → 直接定位,随机访问 O(log n)代价:索引表占额外空间 记录分组、组间有序;每组一个索引项 索引:组1首记录 索引:组2首记录 组1 → 组2 → R1 R2 R3 R4 R5 先查索引定位组,再组内顺序遍历效率 O(√n):顺序与纯索引的折中
点击「播放」或「下一步」:三种有结构文件逐个构建并演示查找路径
第 1~3 步顺序文件;第 4~5 步索引文件;第 6~8 步索引顺序文件;第 9 步复杂度对比。
记录 索引表 查找定位

相关知识点

file-concept-and-classification file-physical-structure

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。