软件设计师教程(五)计算机系统知识-数据结构
软件设计师教程
软件设计师教程(一)计算机系统知识-计算机系统基础知识
软件设计师教程(二)计算机系统知识-计算机体系结构
软件设计师教程(三)计算机系统知识-计算机体系结构
软件设计师教程(四)程序设计语言基础知识
数据结构
线性结构
一种基本的数据结构,就是排排站,一个接一个。
线性表
线性表的定义
除了第一个、最后一个元素,序列中的每个元素均只有一个直接前驱,和一个直接后驱。第一个、最后一个元素都是明确定义好的。
线性表的存储结构
- 顺序存储—数组
- 链式存储—链表
栈和队列
栈—后进先出
队列—先进先出
就是指定存储的队列,进的口子和出的口子,也只能从这两个口子加元素出元素。
栈
栈只能访问其一端来实现数据存储和检索的线性数据结构,先进后出。
栈的空间容量有限,应用就是表达式求值、括号匹配等,讲递归过程转变为非递归过程的处理。
队列
只允许在一端插入元素,另一端删除元素。先进先出。
队列有两个指针,一个是队头还有一个是队尾。应用就是需要排队的场合,打印队列、离散时间的计算模拟等等。
串
仅有字符构成的有限序列,线性表。
串衍生出一些匹配算法。
数组、矩阵和广义表
数组
n n n维数组是一种“同构”的数据结构,其每个数据元素类型相同、结构一致。
矩阵
节省存储空间的情况下使矩阵的各种运算能高效地进行。
- 特殊矩阵 ⇒ 对称矩阵、三角矩阵和对角矩阵等等
- 稀疏矩阵 ⇒ 用三元组表表示 (行号、列号、值)
广义表
0个或多个单元素或子表组成的有限序列。不常用,我觉得用字典可以完美替代
树
描述客观世界中广泛存在的层次结构关系
树与二叉树的定义
树就是一堆结点的有限集合,除了空树,有且仅有一个称为根的结点,其余结点就可以分为互不相交的有限子集。其中每个有限子集又都是一棵树,称为根结点的子树
二叉树就是每颗子树最多分出两个分支,由于对称性,所以可以做一些递归算法等等。
二叉树的性质与存储结构
二叉树第
i
i
i
(
i
⩾
1
)
(i\geqslant 1)
(i⩾1) 最多有
2
i
−
1
2^{i-1}
2i−1 个结点
高度为k的二叉树最多有
2
k
−
1
2^k-1
2k−1结点,
(
k
⩾
1
)
(k\geqslant 1)
(k⩾1)
可以用三叉链表或二叉链表来存储二叉树,链表的头指针指向二叉树的根结点。
二叉树的遍历
先序、中序、后序,还有层序遍历
线索二叉树
每个结点多了前驱、后继。将先、中、后的遍历顺序固定下来了。
最优二叉树
哈夫曼树 所有叶子结点的带权路径长度之和最小的树。
构造算法是用全值最小的两个结点合成一个新的结点,这样不断地递归就好了。
树和森林
树的存储有双亲表示法、孩子表示法和孩子兄弟表示法。
图
本文来自博客园,作者:赫凯,转载请注明原文链接:https://www.cnblogs.com/heKaiii/p/17137350.html