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

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

文件管理 & 线性表

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

文件管理

文件的结构

无结构文件

在这里插入图片描述

有结构文件(重点)

在这里插入图片描述

定长与不定长记录

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

顺序文件(类线性表)

它的逻辑结构

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

在这里插入图片描述

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

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

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

定长记录下:

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

可变长记录下:

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

在这里插入图片描述

小结

在这里插入图片描述

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

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

结语

在这里插入图片描述

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

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

http://www.xdnf.cn/news/1071127.html

相关文章:

  • 自动化保护 AWS ECS Fargate 服务:使用 Prisma Cloud 实现容器安全
  • uiautomation控制计算器,不动鼠标(界面控制)
  • Nuxt.js基础(配置)
  • 【Elasticsearch】Linux环境下安装Elasticsearch
  • 论特定领域软件架构
  • 《Opto-Electronic Advances》热点论文速览(2025)
  • 汽车涂胶车间的“通信桥梁”:PROFIBUS DP转ETHERNET/IP网关的应用实践
  • word中如何保存高清图片,并保存为高质量的pdf文件(图像不失真)
  • 多张图片生成PDF每张图片生成pdf的一页
  • lxd 容器内的深度学习服务器环境配置
  • sql server 将nvarchar长度设置成max有什么隐患
  • VSCode中创建和生成动态库项目
  • 时序数据库全面解析与对比
  • TCP/IP协议简要概述
  • 小型软件开发的三重境界:从混沌编码到结构化设计
  • Stable Diffusion入门-ControlNet 深入理解 第二课:ControlNet模型揭秘与使用技巧
  • 基于残差神经网络的垃圾分类
  • Maven生命周期与阶段扩展深度解析
  • 嵌入式项目:基于QT与Hi3861的物联网智能大棚集成控制系统
  • jenkins中执行python脚本导入路径错误
  • Chrome浏览器访问https提示“您的连接不是私密连接”问题解决方案
  • 【C++特殊工具与技术】固有的不可移植的特性(3)::extern“C“
  • 力扣第455场周赛
  • MATLAB 4D作图
  • Hyperledger Fabric 入门笔记(二十)Fabric V2.5 测试网络进阶之Tape性能测试
  • OpenCV模版匹配方法的衡量指标比较
  • 修复opensuse 风滚草rabbitmq的Error: :plugins_dir_does_not_exist问题
  • 【STM32】外部中断
  • 【Linux】基础开发工具(2)
  • java枚举enum的使用示例