1.线性表
线性表主要有两种表示方法一种是顺序表示,一种是链式表示。
顺序表示 | 链式表示 | |
---|---|---|
定义 | 一组地址连续的存储单元依次存储线性表的数据元素特征(逻辑相邻,地址相邻) | 一组任意的存储单元存储线性表的数据元素(地址可以连续,也可以不连续(逻辑相邻,地址不一定相邻) |
实现 | 通过地址来实现逻辑相邻 | 通过在对象中保存后继数据的存储位置实现逻辑相邻 |
优点 | 查找方便,地址可直接计算得出,时间复杂度O(1) | 删除和插入简单 |
缺点 | 删除和插入较复杂,需要操作当前元素之后所有元素 | 查询复杂,需要通过遍历链表来查找,时间复杂度O(n) |
表现形式 | 单链表:只含有一个指针域(查找只能从前往后遍历) 循环链表:与单链表相比,链表最后节点指向头节点 双向链表:有两个指针域,一个指向前驱,一个指向后继 |
2.数组
数组可以理解为一种特殊的线性表。数组一旦被定义,他的维度和维界就不再改变。数组除了初始化和销毁以外,只具有存储操作和修改操作。
3.栈与队列
栈 | 队列 | |
---|---|---|
定义 | 只能在表尾进行插入和删除的线性表(后进先出) | 只能在表的一端进行插入,另一端进行删除的线性表(先进先出) |
应用 | 数制转换/括号匹配的检验/行编辑程序/迷宫求解/表达式求解/递归的实现 | 操作系统的作业排队 |
4.串
串是由零个或者多个字符组成的有限序列。
串的定长顺序存储表示:用一组地址连续的存储单元存储串值的字符序列。
串的堆分配存储表示:仍以一组地址连续的存储单元存放串值字符序列,但存储空间是在程序执行过程中动态分配而来。
串的块链存储表示:采用链表形式存储,链表的每个节点可以是一个或者多个连续的地址。
5.树
树基本术语:
- 结点:数据元素及指向起子树的分支
- 结点的度:结点拥有的子树数
- 叶子:度为零的结点
- 分支结点:度不为零的结点
- 树的度:树内各结点的度的最大值
二叉树:每个节点最多只有两个子树,并且左右子树不能颠倒。
特点:
1.在二叉树的第i层上最多有2的i-1次方个结点
2.深度为k的二叉树最多有2的k次方-1个结点
3.叶子数=度为2的结点数+1