操作 | 数组 | 链表 |
---|---|---|
构造 | $O(1)$ | $O(1)$ |
销毁 | $O(1)$ | $O(n)$ |
取元 | $O(1)$ | $O(n)$ |
插入 | $O(n)$ | $O(1)$ |
删除 | $O(n)$ | $O(1)$ |
优点 | 可随机存取 | 插入删除快,空间效率高 |
循环链表:从任何节点出发可以遍历链表。
双向链表:快速访问前驱。
稀疏矩阵(通常认为稀疏因子(非零元素占比)不超过 0.05 的矩阵)的存储方式:三元组,十字链表(同一行的非零元通过 right 域链接成一个循环链表,同一列的非零元通过 down 域链接成一个循环链表)。
比较 | 顺序栈 | 链式栈 |
---|---|---|
空间 | 需要初始化规模,空间利用率低 | 无需初始化规模,空间利用率高 |
操作 | 进出栈 $O(1)$,清空栈 $O(1)$ | 进出栈 $O(1)$,清空栈 $O(n)$ |
栈的应用:括号匹配,后缀表达式,递归,回溯
队列的应用:缓冲
为了提高顺序栈的空间利用效率,可以将顺序栈做成双栈。
为了提高顺序队列的空间利用效率,可以将顺序队列做成循环队列。
节点的度:节点的子节点个数
树的度:树中所有节点的度的最大值
满二叉树:深度为 $h$,节点数为 $2^h-1$ 的二叉树
完全二叉树:深度为 $h$,且仅 $h$ 层从右向左连续缺若干节点的二叉树
树的性质:
完全二叉树可用顺序存储
树的存储:广义表、双亲表示、左孩子右兄弟
由二叉树的前序序列和中序序列可唯一地确定一棵二叉树
可用于实现优先级队列
图的相关问题和算法见另一篇博文。
参考资料:
清华大学电子系吴及老师课件