软考(软件设计师)考点总结 -- 数据结构与算法基础

数据结构

数据结构的定义:
数据结构是相互之间存在一种或多种特定关系的数据元素的集合。数据结构包括三方面的内容:逻辑结构、存储结构和数据的运算。数据的逻辑结构和存储结构是密不可分的两个方面。一个算法的设计取决于所选的逻辑结构,而算法的实现依赖于所采用的的存储结构。

数据逻辑结构:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第1张图片

线性表:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第2张图片

顺序存储与链式存储:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第3张图片
性能对比:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第4张图片

字符串(String): 符号与数值的一个连续序列。字符串长度值字符个数的总和(包括空格)。

KMP匹配算法:进行字符串模式匹配运算效率较高的算法
在这里插入图片描述
结果:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第5张图片
j=1,第一种情况,next=0
j=2,第三种情况,字符串(a),next=1
j=3,字符串(ab),无匹配项,第三种情况,next=1
j=4,字符串(abc),无匹配项,第三种情况,next=1
j=5,字符串(abca),k=2时p1=p5-2+1,第二种情况,next=k=2
j=6,字符串(abcaa),k=2时p1=p6-2+1,第二种情况,next=k=2
j=7,字符串(abcaab),k=3时p1p2=p5p6,第二种情况,next=k=3

队列与栈:

软考(软件设计师)考点总结 -- 数据结构与算法基础_第6张图片

例题:
在这里插入图片描述
答案:cba、bca、abc
入队与出队的序列是相同的,但是再入栈序列一定的情况下,元素的出栈时机可以不同,会形成不同的出栈序列。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第7张图片
答案:D,e3不可能在e2和e1中间

数组、矩阵和广义表

数组:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第8张图片

例题:
在这里插入图片描述
答案: a + (2 * 5 + 3) * 2 = a + 26

稀疏矩阵:

软考(软件设计师)考点总结 -- 数据结构与算法基础_第9张图片

例题:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第10张图片
答案:A

广义表:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第11张图片

长度: 最外层含有的元素数,深度: 嵌套最多的层数
例1: 长度3,深度2
例2: head(head(tail(LS1)))

树与二叉树

软考(软件设计师)考点总结 -- 数据结构与算法基础_第12张图片

结点的度:此结点的子结点数
树的度:树中,节点的最大度
叶子结点:度为0的结点
内部节点:度不为0的结点,也称为分支结点或非终端结点
层次:根结点为第一层,之后层数依次加1

二叉树:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第13张图片
满二叉树: 二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上
完全二叉树: 如果一个二叉树与满二叉树前m个节点的结构相同,这样的二叉树被称为完全二叉树

二叉树的遍历:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第14张图片

前序遍历(左根右): 1,2,4,5,7,8,3,6
中序遍历(根左右):4,2,7,8,5,1,3,6
后序遍历(左右根):4,8,7,5,2,6,3,1
层序遍历(逐层遍历): 1,2,3,4,5,6,7,8

树转二叉树: 左孩子、右兄弟
软考(软件设计师)考点总结 -- 数据结构与算法基础_第15张图片

反向构造二叉树:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第16张图片

解析:前序序列得知:根节点为A,中序序列知:左子序列为HBEDF,有子序列为GC
左子序列的前序序列是BHFDE,即根结点是B,左子序列H,有子序列是EDF,依此类推
只有知道前序序列/中序序列或者知道中序序列/后序序列才能反向构造二叉树。

查找二叉树:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第17张图片

最优二叉树(哈夫曼树):
软考(软件设计师)考点总结 -- 数据结构与算法基础_第18张图片

带权路径长度: 路径长度 * 权值
树的带权路径长度:所有节点的带权路径长度之和。
哈夫曼编码:左0、右1

线索二叉树:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第19张图片
前序线索二叉树: 左子针指向前序遍历的前驱节点,右子针执行前序遍历的后继节点。

平衡二叉树:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第20张图片
平衡度:叶子节点为0,其它: 左子树深度 - 右子树深度

B-树:
M阶B-树中,数中每个节点至多有M棵子树,若根节点不是叶子节点,则是少有两棵树;除根以外所有非终端结点至少有[M/2]棵子树。

软考(软件设计师)考点总结 -- 数据结构与算法基础_第21张图片
完全图适合采用邻接矩阵存储。

邻接矩阵:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第22张图片

邻接表:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第23张图片

图的遍历:

图的遍历是指对图中所有顶点进行访问,且只访问一次的过程。为了避免顶点的重复访问,可以在遍历过程中对已访问过的结点进行标记。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第24张图片

拓扑排序:

对有向图进行拓扑排序的方法如下:
在AOV网中选择一个入度为零的顶点输出,从网中删除该顶点,以及与该点有关的所有边。重复执行,一直到网中不存在入度为0的顶点为止。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第25张图片

图的最小生成树:

普利姆算法:
从某一个顶点出发,依次找于其相连的边的最小值,之后变成两个顶点,找两个顶点相连边的最小值,依次类推,找到将所有顶点找完为止,得到普迪姆算法的最小生成树。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第26张图片

克鲁斯卡尔算法:
依次寻找图中没有产生环路现象的最小边。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第27张图片

算法分析

算法的特性:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第28张图片

算法的复杂度:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第29张图片

分治算法:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第30张图片
软考(软件设计师)考点总结 -- 数据结构与算法基础_第31张图片
回溯法:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第32张图片
贪心法:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第33张图片
动态规划法:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第34张图片

查找算法

查找算法:顺序查找、二分查找、散列表

顺序查找:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第35张图片

二分查找:
先对中间位置元素比较,查找元素比该元素大时,对后半去域进行二分查找,比当前元素小时,对前半区进行二分查找。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第36张图片

软考(软件设计师)考点总结 -- 数据结构与算法基础_第37张图片
折半查找成功时关键字的比较次数最多为[log2n]+1次。
折半查找的时间复杂度为O(log2n)

散列表(哈希表):
软考(软件设计师)考点总结 -- 数据结构与算法基础_第38张图片
哈希表是一个通过记录关键字为自变量的函数得到该记录的存储地址而构造的查找表。
哈希冲突:哈希函数将关键字不同的元素映射到了同一个存储地址。
减少冲突:是哈希函数尽可能均匀的把关键字映射到存储区的各个存储地址上,这样可以提高查找效率。
H(Key)=Key mod p,(p的值一般为不大于n且最接近n的质数)

排序算法

软考(软件设计师)考点总结 -- 数据结构与算法基础_第39张图片

复杂度与稳定性比较:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第40张图片

直接插入排序:
若一组序列基本有序,则适合进行掺入排序。
软考(软件设计师)考点总结 -- 数据结构与算法基础_第41张图片

希尔排序:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第42张图片

直接选择排序:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第43张图片
堆排序:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第44张图片

软考(软件设计师)考点总结 -- 数据结构与算法基础_第45张图片
软考(软件设计师)考点总结 -- 数据结构与算法基础_第46张图片

冒泡排序:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第47张图片
快速排序:软考(软件设计师)考点总结 -- 数据结构与算法基础_第48张图片
归并排序:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第49张图片
基数排序:
软考(软件设计师)考点总结 -- 数据结构与算法基础_第50张图片

你可能感兴趣的:(软考,软件设计师,数据结构,算法)