逻辑结构
逻辑结构分为线性结构和*非线性结构
线性结构
-
线性结构是有序的数据元素的集合
-
数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。
-
常用的线性结构有:线性表,栈,队列,数组,字符串,链表
-
线性结构特点
- 集合中必存在唯一的一个"第一个元素";
- 集合中必存在唯一的一个"最后的元素";
- 除最后元素之外,其它数据元素均有唯一的"后继";
- 除第一元素之外,其它数据元素均有唯一的"前驱"。
-
如(a1,a2,a3,.....,an),a1为第一个元素,an为最后一个元素,此集合即为一个线性结构的集合。
非线性结构
- 非线性结构中各个数据元素不再保持在一个线性序列中
- 每个数据元素可能与零个或者多个其他数据元素发生联系。根据关系的不同,可分为层次结构和群结构。
- 常见的非线性结构有:二维数组,多维数组,广义表,树(二叉树等)
- 其中多维数组是由多个一维数组组成的,所以不再是线性结构)
- 逻辑特征是一个结点元素可能对应多个直接前驱和多个后继
存储结构
存储结构是指数据结构在计算机中的表示(又称映像),也称物理结构。
包括数据元素的表示 和 关系的表示
数据的存储结构主要有:顺序存储结构、链式存储结构、散列存储结构、索引存储结构
-
顺序存储结构
- 在一块连续的存储区域,一个接着一个的存放数据。
- 优点:节省空间,可随机存储
- 缺点:插入、删除时需要移动元素,效率低
- 如:数组
-
链式存储结构
- 节点间的逻辑关系由附加的引用字段表示
- 不要求逻辑上相邻的节点在物理位置上相邻
- 每个数据元素包括一个数据域和一个指针域(数据域用来存放数据,指针域用来指向后继结点的位置)
- 优点:插入、删除灵活
- 缺点:不能随机存取,查找速度慢
- 如:链表
-
散列存储结构
- 根据节点的关键字直接计算出该节点的存储地址,又称Hash存储即顺序存储+算列
- 优点:检索、增加和删除节点的操作快
- 缺点:若散列函数不好可能会出现元素存储单元的冲突,解决冲突会增加时间和空间的开销
-
索引存储结构
- 采用附加的索引表的方式存储节点信息,即顺序存储+索引
- 索引表由若干索引项组成(索引项一般形式为关键字和地址,关键字是唯一标识一个节点的数据项)
-
稠密索引:每个节点在索引表中都有一个索引项,索引项的地址是其节点所在的存储位置
-
稀疏索引:一组节点在索引表中只对应一个索引项,索引项的地址是该组节点的起始存储位置
-
- 索引表由若干索引项组成(索引项一般形式为关键字和地址,关键字是唯一标识一个节点的数据项)
- 优点:检索速度快
- 缺点:增加了附加的索引表,会占用较多的存储空间;在增加和删除数据时要修改索引表,会花费更多的时间。
- 采用附加的索引表的方式存储节点信息,即顺序存储+索引
逻辑结构和存储结构的区别和判断
-
当一个结构,如数组、链表、树、图,在逻辑结构中只有一种定义,而在物理结构中却有两种选择,那么这个结构就属于逻辑结构;
-
相反,当此结构在原有基础上加上了某种限定,使得其在物理结构中只有一种定义,那么这个结构就属于物理(存储)结构;
举例1:栈属于什么结构?
分析:栈在逻辑结构中只能属于线性结构,而在物理结构中它可以使用顺序存储(数组),也可以使用链式存储(链表),所以说栈是一种逻辑结构。
举例2:线索二叉树属于什么结构?
分析:首先,可以得到二叉树是一种数据结构,但是线索二叉树是加上线索后的链表结构(不能用顺序存储),也就是说,它是计算机内部的只有一种存储结构,所以是物理结构。