当前位置: 首页 > news >正文

Re:从零开始的文件结构(融合线性表来理解 考研向)

文件管理 & 线性表

  • 文件管理
    • 文件的结构
      • 无结构文件
    • 有结构文件(重点)
      • 定长与不定长记录
      • 顺序文件(类线性表)
        • 它的逻辑结构
        • 它的物理结构(存储结构)
        • 小结
      • 索引顺序文件与多级索引顺序文件
        • 形象化理解(很清晰)
      • 结语

文件管理

文件的结构

无结构文件

在这里插入图片描述

有结构文件(重点)

在这里插入图片描述

定长与不定长记录

  • 定长记录:
    在这里插入图片描述
  • 不定长记录
  • 其实这个东西就可以类比于我们在学习线性表中所解决的稀疏多项式问题,也就是一旦当数组当中的某些项的差异比较大的时候,我们如果还是采用定长记录的方式就会使得存储空间的利用率大大下降,
  • 例如下图,有的同学没有特长有的同学特长却非常多
    在这里插入图片描述

顺序文件(类线性表)

它的逻辑结构

而这里所提到的关键字可以看做是一个特征 这个特征唯一可以标识每个数据项(结点)
eg:就像上面的校园管理系统的例子中,我们的关键字就是学号,为什么不选择姓名 作为我们的关键字呢,因为在一个庞大的校园里面很有可能出现重名的情况,而现在我们说的是单级目录,单级目录是不允许有重复项出现的

在这里插入图片描述

  • “顺序结构” 通常指线性结构(数据元素按线性关系排列,如线性表)
  • “串结构” 是特殊的线性结构(数据元素仅为字符,如字符串)。
它的物理结构(存储结构)

类似于我们顺序表 我们对于它的存储结构可以分为链式存储(链表)和顺序存储(数组)
当然 对于链式存储 不论采用上面哪种记录方式 我们都得首元结点开始寻找,但是如果要进行增删目录是比较方便的

来看顺序存储结合我们前面提到的两种记录方式 :

定长记录下:

  • 我们最理想的状态就是采取顺序存储的定长记录方式,这样一来就可以拥有了数组的一大优势,随机存取我们只需要知道首地址我们就可以根据每个记录长度(数组每个元素的大小)以O(1)的时间来得到目标元素的位置
  • 当前进一步采用顺序结构(逻辑结构),那么我们是不是此时是不是就可以将它看做一个有序的数组,此时如果给定关键字(学号)我们是不是就可以采用二分查找的快速锁定对应的记录在这个目录的位置呢
  • 但是进一步采用串结构是不能做到快速查找这点的 具体原因如下(了解):
  • 串是 “字符序列” 的逻辑结构,没有 “元素包含关键字” 的逻辑设计,缺乏 “关键字→元素” 的映射基础;
  • 串的操作围绕字符序列处理,而非关键字的高效检索,无法支持快速查找所需的索引或映射机制;
  • 关键字目录的本质是 “基于唯一标识的元素索引”,这与串结构的设计目标(处理字符序列)完全不匹配

可变长记录下:

  • 那么如果是可变长记录那么就可以联想到我们稀疏多项式的情况 这个时候由于采取的是可变长记录方式我们并不知道每个记录内容的长度,所以我们必须得一个一个顺序的找

在这里插入图片描述

小结

在这里插入图片描述

索引顺序文件与多级索引顺序文件

形象化理解(很清晰)
  • 对于单级:
    在这里插入图片描述
  • 对于多级索引:
    在这里插入图片描述

结语

在这里插入图片描述

我觉得如果想要学好文件这一章,需要扎实的数据结构基础,而这一章跟前面我们刚刚学习的基本存储管理方式又有很多相似之处,
所以我建议把前面一章消化吸收之后 再来学这一章的内容更为合适一些 我感觉操作系统当中很多知识的大体框架都是差不多的 甚至于介绍顺序和前因后果都差不多 只不过应用于不同的方面罢了 、
下一篇我会更新文件目录部分 如果弄清楚了前面的多级页表和DS当中的树 会更好理解一些

******************************************************************************************* signed by 曦月逸霜

http://www.lqws.cn/news/549397.html

相关文章:

  • 设计模式精讲 Day 15:解释器模式(Interpreter Pattern)
  • LangChain4j(20)——调用百度地图MCP服务
  • Ubuntu系统Postman资源占用高怎么办?
  • Stable Diffusion入门-ControlNet 深入理解 第二课:ControlNet模型揭秘与使用技巧
  • 【软考--软件设计师】2.程序设计语言
  • mongodb生产备份工具PBM
  • opensuse安装rabbitmq
  • Transformer
  • 将ONNX模型转换为(OPENMV可用的格式)TensorFlow Lite格式
  • Spring Cloud 微服务(服务注册与发现原理深度解析)
  • python基于Django+mysql实现的图书管理系统【完整源码+数据库】
  • uv包管理常用命令
  • Stable Diffusion 3终极提示词库:2000个工业设计场景生成公式(2025企业级实战指南)
  • [Ethernet in CANoe]1--SOME/IP arxml文件格式的区别
  • 动手学Python:从零开始构建一个“文字冒险游戏”
  • 记忆化搜索(dfs+memo)无环有向图
  • ubuntu22上安装redis6
  • 【开发杂谈】Auto Caption:使用 Electron 和 Python 开发实时字幕显示软件
  • JAX study notes[7]
  • uniapp消息推送
  • Springboot中常用的注解(分层整理)
  • Redis主从复制原理
  • CI/CD的常规设置及核心原理
  • 【大数据】大数据产品基础篇
  • OpenCV图像添加水印
  • Java底层原理:深入理解JVM类加载机制与反射机制
  • nginx:配置反向代理后不生效
  • 智能实验室革命:Deepoc大模型驱动全自动化科研新生态
  • could not import google.golang.org/protobuf/proto
  • 前沿融合:机器学习如何重塑智能水泥基复合材料研发范式