绪论
1.分类
1.1 逻辑结构
Ⅰ 线性结构
① 有且只有一个根结点;
② 每个结点最多只有一个前驱;
③ 也最多只有一个后继;线性结构指的是数据元素之间存在着“一对一”线性关系的数据结构
是逻辑上一维,不要求内存空间上顺序
线性表:(采用顺序表或链表形式)
栈:顺序栈<—>链栈
队列:双队列、循环队列<—>链队
串:字符串...
线性数组:普通一维数组、顺序表(采用数组形式,顺序存储结构保存的线性表)...
线性链表:单链表、双向链表...
矩阵
向量:n维向量
二维表
Ⅱ 非线性结构
非线性结构指的是数据元素之间存在着“一对多”非线性关系的数据结构
集合结构
树结构:树、二叉树...
堆:其逻辑结构是(符合某种堆排序的)完全二叉树或近似完全二叉树
图结构:有向图、无向图;邻接表、邻接矩阵...
tips:
数组有非线性数组:二维数组、多维数组;稀疏矩阵...
链表有非线性链表:二叉链表
广义表(线性表的推广,它的数据元素是线性表,但不同构,即或者是单元素或者是线性表)因此广义表本身是非线性结构
带链的栈(链栈)可以用收集计算机存储空间所有的空闲的存储结点,是线性表。
//数组可以是线性结构也可以是非线性结构
//链表可以是线性结构也可以是非线性结构
首先,一般做到题目,说链表是线性结构的,默认是线性链表
定义的链表中,若只含有一个指针域来存放下一个元素地址,称这样的链表为单链表或线性链表。
在单链表的结点中增加一个指针域指向它的直接前件,这样的链表,就称为双向链表(一个结点中含有两个指针),也是线性链表。
循环链表具有单链表的特征,但又不需要增加额外的存储空间,仅对表的链接方式稍作改变,使得对表的处理更加方便灵活,属于线性链表。
二叉链表是二叉树的物理实现,是一个存储结构,不属于线性结构,为非线性结构。
/*广义表是*/线性表的推广(推广部分)属于/*非线性结构*/
1.2 存储结构
Ⅰ 顺序存储
插入、删除运算需要引起大量结点移动,效率不高
顺序表属于线性数组(线性表)的顺序存储结构【是随机存取的存储结构】
顺序队列属于队列(线性表)的顺序存储结构
循环队列属于队列(线性表)的顺序存储结构
完全二叉树属于树的顺序存储结构
稀疏矩阵(三元组法存储)属于非线性结构的顺序存储方式
Ⅱ 链式存储
线性链表/单链表属于线性表的链式存储结构【是顺序存取的存储结构】
链队属于队列(线性表)的链式存储结构
二叉链表属于二叉树的链式存储结构
Ⅲ 索引存储
Ⅳ 散列存储
哈希表
2.其它
链表的每个节点都恰好包含一个指针【错误】
例:双链表的每个节点中包含两个指针
线性表指的是逻辑结构上一维,属于逻辑结构范畴;存储结构上既可以顺序存储,也可以链式存储,
有序表指的是逻辑意义上数据元素的有序,属于逻辑结构范畴;存储结构上既可以顺序存储,也可以链式存储,
顺序表指的是存储结构(内存空间)上顺序存储,属于顺序存储结构,属于存储结构范畴。
哈希表指的是存储结构(内存空间)上散列存储,属于散列存储结构,属于存储结构范畴。
单链表指的是存储结构(内存空间)上链式存储,属于链式存储结构,属于存储结构范畴。
邻接矩阵指的是以数组方式存储图结构的存储结构。
邻接表指的是以数组与链表相结合的形式存储图结构的存储结构。
二分查找只适合①顺序存储的②有序表