逻辑结构与存储结构

179 阅读4分钟

逻辑结构

逻辑结构分为线性结构和*非线性结构

线性结构

  1. 线性结构是有序的数据元素的集合

  2. 数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。

  3. 常用的线性结构有:线性表,栈,队列,数组,字符串,链表

  4. 线性结构特点

    • 集合中必存在唯一的一个"第一个元素";
    • 集合中必存在唯一的一个"最后的元素";
    • 除最后元素之外,其它数据元素均有唯一的"后继";
    • 除第一元素之外,其它数据元素均有唯一的"前驱"。
  5. 如(a1,a2,a3,.....,an),a1为第一个元素,an为最后一个元素,此集合即为一个线性结构的集合。

非线性结构

  1. 非线性结构中各个数据元素不再保持在一个线性序列中
  2. 每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
  3. 常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)
  4. 其中多维数组是由多个一维数组组成的,所以不再是线性结构)
  5. 逻辑特征是一个结点元素可能对应多个直接前驱和多个后继

存储结构

存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。

包括数据元素的表示关系的表示

数据的存储结构主要有:顺序存储结构、链式存储结构、散列存储结构、索引存储结构

  1. 顺序存储结构

    • 在一块连续的存储区域,一个接着一个的存放数据。
    • 优点:节省空间,可随机存储
    • 缺点:插入、删除时需要移动元素,效率低
    • 如:数组
  2. 链式存储结构

    • 节点间的逻辑关系由附加的引用字段表示
    • 不要求逻辑上相邻的节点在物理位置上相邻
    • 每个数据元素包括一个数据域和一个指针域(数据域用来存放数据,指针域用来指向后继结点的位置)
    • 优点:插入、删除灵活
    • 缺点:不能随机存取,查找速度慢
    • 如:链表
  3. 散列存储结构

    • 根据节点的关键字直接计算出该节点的存储地址,又称Hash存储即顺序存储+算列
    • 优点:检索、增加和删除节点的操作快
    • 缺点:若散列函数不好可能会出现元素存储单元的冲突,解决冲突会增加时间和空间的开销
  4. 索引存储结构

    • 采用附加的索引表的方式存储节点信息,即顺序存储+索引
      • 索引表由若干索引项组成(索引项一般形式为关键字和地址,关键字是唯一标识一个节点的数据项)
        • 稠密索引:每个节点在索引表中都有一个索引项,索引项的地址是其节点所在的存储位置

        • 稀疏索引:一组节点在索引表中只对应一个索引项,索引项的地址是该组节点的起始存储位置

    • 优点:检索速度快
    • 缺点:增加了附加的索引表,会占用较多的存储空间;在增加和删除数据时要修改索引表,会花费更多的时间。

逻辑结构和存储结构的区别和判断

  1. 当一个结构,如数组、链表、树、图,在逻辑结构中只有一种定义,而在物理结构中却有两种选择,那么这个结构就属于逻辑结构;

  2. 相反,当此结构在原有基础上加上了某种限定,使得其在物理结构中只有一种定义,那么这个结构就属于物理(存储)结构;

举例1:栈属于什么结构?

  分析:栈在逻辑结构中只能属于线性结构,而在物理结构中它可以使用顺序存储(数组),也可以使用链式存储(链表),所以说栈是一种逻辑结构。

举例2:线索二叉树属于什么结构?

  分析:首先,可以得到二叉树是一种数据结构,但是线索二叉树是加上线索后的链表结构(不能用顺序存储),也就是说,它是计算机内部的只有一种存储结构,所以是物理结构。