软考中级-软件设计师-17.上午题-数据结构(5分左右)

94 阅读5分钟

17.1 线性结构

17.1.1 时间复杂度

17.1.2 渐进符号

17.1.3 递归式的时间空间复杂度

每次递归时间复杂度不变,递归时间复杂度为:递归的次数 * 每次递归的时间复杂度

17.1.4 递归式主方法

17.1.5 线性结构

17.1.5.1 线性表

顺序存储

  • 优点:可以随机存取表中元素;
  • 缺点:插入和删除操作需要移动元素;

表长为n的线性表中插入一个新元素期望值E为n/2,删除一个元素的期望值为(n - 1)/2,查找一个元素的期望值为(n + 1)/2

插入时间复杂度:最好:O(1) 最坏:O(n) 平均:O(n)

删除时间复杂度:最好:O(1) 最坏:O(n) 平均:O(n)

查找时间复杂度:最好:O(1) 最坏:O(1) 平均:O(1)

链式存储

  • 优点:插入和删除操作不需要移动元素;
  • 缺点:不能随机存取元素;

插入时间复杂度:最好:O(1) 最坏:O(n) 平均:O(n)

删除时间复杂度:最好:O(1) 最坏:O(n) 平均:O(n)

查找时间复杂度:最好:O(1) 最坏:O(n) 平均:O(n)

循环单链表

双链表

17.1.5.2 栈

17.1.5.3 队列

循环队列对头指针:(Q.rear - Q.len + 1 + M) % M

队尾指针:(Q.front + Q.len - 1 + M) % M

队列长度:(Q.rear - Q.front + M) % M

采用循环队列优点为:入队和出队操作都不需要移动队列的其他元素;

17.1.5.4 串

模式串

KMP

17.1.6 数组、矩阵

17.1.6.1 数组

当i=j时,按行存储与按列存储一致;

17.1.6.2 矩阵

稀疏矩阵:压缩存储方式常用三元顺序表或十字链表表示;

17.2 树

树结构是一种非线性结构,树中的每一个数据元素可以有两个或两个以上的直接后继元素,用来描述层次结构关系。

性质1:树中的结点总数等于树中所有结点的度之和加1;

性质2:度为m的树中第i层上至多有mi-1个结点;

性质3:高度为h的m次树至多有(mh - 1) / (m - 1);

性质4:具有n个结点、度为m的树的最小高度为logm(n * (m - 1) + 1)向上取整;

17.2.1 二叉树

17.2.2 满二叉树和完全二叉树

对于满二叉树,判断两个结点在同一层,log2m下取整 = log2n下取整;

卡特兰数:

17.2.3 二叉树的遍历

先序、中序、后序、层次

17.2.4 平衡二叉树

二叉树中任意一个结点的左右孩子高度之差的绝对值不超过1;

完全二叉树一定是平衡二叉树;

17.2.5 二叉排序树

根节点的关键字大于左子树所有结点的关键字,小于右子树所有结点的关键字,同时左右子树也是一颗二叉排序树,中序遍历得到的序列是有序序列;

从左到右排列同层次的结点,其关键字呈现有序排列的特点;

17.2.6 最优二叉树(哈夫曼树)

  • 哈夫曼树只有度为0和度为2的结点;
  • 哈夫曼树的总结点为2n - 1

哈弗曼编码压缩比:(字符频率和 * 等长编码 - 每个字符路径长度 * 字符频率的和) / 字符频率和 * 等长编码

17.2.7 线索二叉树(了解)

17.3 图

17.3.1 有向图和无向图

17.3.2 完全图

17.3.3 顶点的度

入度:指向自己的弧线,出度:指向其他顶点的弧线;

顶点的度 = 入度 + 出度;总度数:2e

17.3.4 连通图和强连通图

强连通图最少需要n条边,最多需要n * (n - 1)

17.3.5 邻接矩阵

  • 无向图的邻接矩阵是对称的;
  • 无向图邻接矩阵vi的度即为第i行不为0的数量;
  • 无向图邻接矩阵vi的出度即为第i行不为0的数量;vj的入度即为第j列不为0的数量;
  • 有向图的非零元素个数为e,零元素个数为2n - e;
  • 无向图的非零元素个数为2e,零元素个数为2n - 2e;

17.3.6 邻接表

17.3.7 稠密图和稀疏图

稠密图(完全图)适合使用邻接矩阵;而稀疏图适合使用邻接表;

17.3.8 网

边带权值的图称为网;

17.3.9 图的遍历

  1. 深度优先遍历(DFS):时间复杂度,邻接矩阵:O(n2);邻接表:O(n + e)
  2. 广度优先遍历(BFS):同深度;

17.3.10 拓扑排序

  1. AOV网:AOV网中不应该出现有向环,其是一个有向无环图;

17.4 查找

静态查找表:顺序查找、折半(二分)查找、分块查找

动态查找表:二叉树查找、平衡二叉树、B-树、哈希表

17.4.1 静态查找

17.4.1.1 顺序查找

查找成功的平均查找长度ASL = (n + 1) / 2

17.4.1.2 折半查找

查找列表必须是顺序存储且有序;

最多比较次数:log2n下取整 + 1次,平均查找长度为:[(n + 1) / n] * log2(n + 1) -1,当n较大时,ASL ≈ log2(n + 1) -1;

17.4.2 动态查找

17.4.2.1 哈希表

m的值一般取接近n但不大于n的质数;

装填因子α:表中装入的记录数 / 哈希表的长度

装填因子越小,发生冲突的可能性就越小,反之装填因子越大,发生冲突的可能性就越大;

构造哈希函数时应尽量使关键字的所有组成部分都能起作用;

17.4.2.2 堆

17.5 排序

17.5.1 直接插入排序

17.5.2 希尔排序

17.5.3 简单选择排序

17.5.4 堆排序

17.5.5 冒泡排序

17.5.6 快速排序

快速排序是一种分治的排序方法;

17.5.7 归并排序

归并排序是一种分治的排序方法;

17.6 其他

  1. 广度优先搜索图需要借助队列实现;
  2. 优先队列通常采用堆的数据结构来实现;向优先队列中插入一个元素的时间复杂度为O(lgn);
  3. 对一棵二叉排序树进行中序遍历,可以得到该二叉树中节点关键字的有序序列;
  4. 哈夫曼编码属于熵编码;
  5. 若网较稠密,则普利姆算法比较好,若网较稀疏,则克鲁斯卡尔算法比较好;
  6. 长度为n的非空字符串,其中的字符各不相同,则其互异的非平凡字串个数为;