• 文件管理系统-----文件的逻辑结构


    文件的逻辑结构

    在这里插入图片描述
    类比数据结构中的逻辑结构和物理结构

    无结构文件

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

    有结构文件

    又叫做“记录式文件”,记录可分为定长记录和可变长记录,

    定长记录

    在这里插入图片描述

    可变长记录

    如下表,有的记录很少几乎没有,但是有的记录非常长;
    在这里插入图片描述
    在这里插入图片描述

    顺序文件

    在这里插入图片描述在这里插入图片描述

    文件中的记录一个接一个的顺序排列(逻辑上),记录是定长的或可变长的。各个记录在物理上可以顺序存储或链式存储。
    在这里插入图片描述
    根据记录是否按照关键字的顺序来排列,还可以分为串结构和顺序结构;
    在这里插入图片描述

    链式存储类似链表,无法实现随机存取,每次检索时都要从第一个文件一次向后查找

    在这里插入图片描述
    如果是可变长文件,如图l0,l1,l2…并不会呈现出某种规律性,因此也只能从第一个文件一次向后查找

    在这里插入图片描述
    可以实现随机存取

    串结构,这些记录的顺序和关键字的顺序没有什么关系,因为他并不是按照关键字的顺序来排列的,所以只能采用逐个遍历的方式缓慢查找;
    顺序结构,这些记录的顺序和关键字的顺序存在一定的关系,此时说明这些文件是按照某种关键字的顺序来排列的,此时可以通过诸如二分法,哈希表等方式来快速的查找某一个关键字对应的记录
    在这里插入图片描述
    通常,考试当中提到的顺序文件都是指“采用顺序存储方式的顺序文件”;
    在这里插入图片描述

    索引文件在这里插入图片描述

    为文件建立索引表,将关键字作为索引号内容(如果关键字按照某种顺序排列,还可以实现支持按照关键字索引的折半查找);
    同时索引表本身是顺序表,具有非常快的检索速度(如果关键字排列还能更快);
    同时每当对一个记录的删除或增加时都要对索引表进行更新;
    每一个文件的记录对应一个索引表项;
    **除了用关键字作为索引号来建立索引表,也可以用别的不同的数据项作为索引号来建立索引表(可以建立多个索引表)

    索引顺序文件

    索引顺序文件的索引项并不需要按照关键字的顺序来进行排列,因此更方便对新表项的插入操作;
    索引顺序文件的索引表就是一个定长记录的串结构的顺序文件
    在这里插入图片描述
    这样设计的结构会不会造成检索速度慢的问题呢?
    在这里插入图片描述
    rt,
    在这里插入图片描述
    但是假设当有1e6(100w个)个记录的时候,假设可以将这10w个记录分成 根号 100w=1000组,每组1000个记录,则需要先顺序查找索引表找到分组(平均需要500次),找到分组后再在对应的分组中查找这个记录,(平均也需要500次),加起来就是1000次,仍然很多;
    此时可以采用多级索引表的结构
    在这里插入图片描述

    先建立一个低级索引表,每个索引表对应100个表项(就是低级索引表中的一行),每个表项又对应一个分组,每个分组当中又是100个记录,则会有100张低级索引表;因此我们再为这100张低级索引表建立一张顶级的索引表, 这样就形成了两级索引顺;
    在这里插入图片描述
    那么在多级索引表中查找一个记录需要多少次呢?
    首先在顶级索引表中查询属于那个低级索引表,需要(1+…+100)/100=50次,找到所属的低级索引表之后,需要在低级索引表中查找对应的记录所属的分组,需要50次,找到分组之后,需要在分组中查找对应的记录,平均需要50次,因此总共需要50+50+50=150次相对于100w次,检索速度提高了非常之多;同时也满足了不会十分占用内存的需求;

  • 相关阅读:
    springboot基础(17):热部署
    使用yum install和reposync下载rpm安装包以及wget和curl下载文件
    leetcode 55. 跳跃游戏
    eyb:存储过程到更新操作员角色(三)
    【数据库】MySQL的存储引擎
    【算法题】 605. 种花问题
    CentOS 7 安装教程(基于虚拟机安装)
    clip安装
    数据结构之Map&Set
    Redis代替session 实现登录流程
  • 原文地址:https://blog.csdn.net/linjianshaonian_/article/details/127758751