2MUCH

软考-中级软件设计师-06 数据结构与算法基础

2022-05-14


06 数据结构与算法基础

image-20220503153056928

数组

概念:长度固定的线性表,每个元素类型相同

考点:存储地址计算

image-20220503153232866

矩阵

主要考察特殊矩阵的压缩存储问题:对称矩阵、三对角矩阵、稀疏矩阵 image.png

image.png

稀疏矩阵

image-20220503153602838

矩阵坐标转换到数组坐标的解题技巧:带入特殊值

数据结构的定义

概念:计算机存储和组织数据的方式

逻辑结构划分

线性表

分类

链表的基本操作(删除和插入节点)

顺序存储和链式存储对比:

image-20220503154523426

广义表

概念:线性表的推广,以递归的方式进行定义

广度(最外层括号包含的元素个数)、深度(包含括号的重数)

表头head(最外括号的第一个元素)、表尾tail(除去表头的其他所有部分)

image-20220503160909846

字符串的基本数据元素是字符,是取值范围受限的线性表。

树与二叉树

image-20220503160933287

结点的度:孩子数

数的度:所有结点度数最高的度

内部节点:非头节点和叶子节点

深度:最大的层数

二叉树

二叉树与树的区别:二叉树要区分左子树和右子树,树不用区分;二叉树节点的最大度为2

重要性质:n0=n2+1,其中n0为终端节点,n2为度为2的节点

特殊二叉树

image-20220503161436409

二叉树遍历

反向构造二叉树

例题:

image-20220503162440549

树转二叉树

原则:

image-20220503162707664

除了挨个用【原则】分析,还可以用连线法:如上图的虚线图所示。将兄弟结点连起来,并将第一个孩子以外的孩子结点的连线去掉,然后旋转,得到最终的二叉树

查找二叉树(二叉排序树)

特点:

操作:插入和删除结点

image-20220503163239625

最优二叉树(哈夫曼树)

哈夫曼树:用于无损压缩

基本概念:

构造哈夫曼树:即构造带权路径长度最小的树

例题:

image-20220503163738267

求解树的带权路径长度:将所有叶子结点的带权路径长度相加

线索二叉树

why:很多结点的左右指针是空的,可以利用这些空闲指针,来方便遍历

构造线索二叉树:左右线索指针指向的是x序排列的前/后面的结点

平衡二叉树

定义:

非平衡二叉树 -> 平衡二叉树

概念:由顶点集合V和边集合E组成

图与树最大的区别:树没有环路

分类:

特殊:

存储

image-20220503165639983

image-20220503165817778

图的遍历

根据邻接表进行遍历:广度是一个结点所连的线走到底,深度是连续试探第一个

拓扑排序

表示活动之间开始的先后关系

image-20220503170224108

执行完把连线去掉,继续分析

图的最小生成树

使得留下来的边(n-1条,n为节点数)构成树(注意不能有环),权值总和最小

普利姆算法(以点为主)

image-20220503170607893

分析:画图时实时将结点分成两个阵营,寻找到另一个阵营的最短边

克鲁斯卡尔算法(以边为主)

依次选择权最小的边,注意不要构成环。连接所有结点后,即生成结束

算法基础

算法的特性

image-20220503170847056

算法的复杂度

image-20220503171033563

顺序查找和二分查找

顺序查找

image-20220503171742095

二分查找

image-20220503171839069

前提:查找内容本身是有序排序的

image-20220503172118001

image-20220503172151529

散列表

image-20220503172237781

冲突解决:

排序(重要)

image-20220503172611622

稳定性:值相同的数,排序后,顺序是否不变

内/外排序:前者只在内存中,后者用到外存

直接插入排序

image-20220503173036376

希尔排序

是直接插入排序的一种,但更复杂。

好处是:经过前几轮的组内直接插入排序,序列已基本有序。到最后一轮的全组直接插入排序时,调整顺序的次数会更少。

image-20220503173355864

直接选择排序

image-20220503173454649

堆排序

堆的概念

image-20220503173755500

堆排列概念和步骤:

image-20220503173843849

初建堆过程:

image-20220503174316966

重新建堆过程:

image-20220503174646194

所以,诸如从大量数据中求前10小的元素,比较有优势

冒泡排序

image-20220503175039139

快速排序

image-20220503175310879

分析:

归并排序

image-20220503175501777

一般是两两合并

基数排序

image-20220503175728873

基数和关键字的分解有关

排序算法分析(常考)

image-20220503175936970