软件设计师-上午题-03、04 数据结构 (数据结构+算法共9分)

数据结构题号一般分布在57-65,分值一般为9分(但为数据结构+算法)。

24上半年软件设计师考了关键路径关键活动,这个点博主没有讲到,有时间可以自己了解一下。

对于数据结构部分的题目,大多可以取特殊值或特殊情况代入来判断出正确选项(特别是串、数组、树、图章节的题目)。

目录

1 算法效率的度量

1.1 大O表示法

1.2 时间复杂度

1.3 空间复杂度

1.4 真题

2 渐进符号(简单了解)

2.1 真题

3 递归

3.1 递归式时间、空间复杂度

3.2 递归式主方法

3.3 真题

4 线性表

4.1 线性结构与线性表定义

4.2 线性表的顺序表示

4.2.1 线性表的顺序存储

4.2.2 顺序表上基本操作的实现

(1)插入操作

(2)删除操作

(3)查找操作

4.3 线性表的链式表示

4.3.1 线性表的链式存储

4.3.2 单链表上基本操作的实现

(1)插入操作

(2)删除操作

(3)查找操作(按位查找)

4.3.3 循环单链表

4.3.4 双链表(只考过1次且为干扰选项)

4.4 真题

5 栈

5.1 栈的基本概念

5.2 栈的顺序存储(了解)

5.3 栈的链式存储(了解)

5.4 真题

6 队列

6.1 队列的基本概念

6.2 队列的顺序存储与循环队列

6.2 队列的链式存储与双端队列(了解)

6.3 真题

6.4 栈和队列引进

6.5 真题

7 串

7.1 串的定义及基本运算 

7.2 真题

7.3 串的模式匹配与朴素模式匹配

7.4 手算next数组值

7.5 KMP(简单了解)

7.6 真题

8 数组

8.1 一维数组(了解)

8.2 二维数组

8.3 数组计算公式与特性

8.4 真题

9 特殊矩阵

9.1 对称矩阵

9.2 三对角矩阵

9.3 稀疏矩阵

9.4 真题

10 树

10.1 树的基本概念

10.1.1 树的定义

10.1.2 树的基本概念

10.1.3 树的性质

10.1.4 真题

10.2 二叉树

10.2.1 二叉树定义

10.2.2 二叉树性质

10.2.3 满二叉树与完全二叉树

10.2.4 真题

10.3 二叉树的存储结构

10.3.1 二叉树的顺序存储

10.3.2 二叉树的链式存储

10.3.3 真题

10.4 二叉树遍历

10.4.1 二叉树的先序遍历

10.4.2 二叉树的中序遍历

10.4.3 二叉树的后序遍历

10.4.4 二叉树的层序遍历

10.5 根据遍历序列构造二叉树

10.5.1 先序+中序构造二叉树

10.5.2 后序+中序构造二叉树

10.5.3 层序+中序构造二叉树(了解)

10.5.4 真题

10.6 平衡二叉树

10.7 二叉排序树

10.7.1 二叉排序树定义

10.7.2 二叉排序树构造

10.7.3 真题

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

10.8.1 最优二叉树基本概念

10.8.2 构造最优二叉树

10.8.3 哈夫曼编码定义

10.8.4 哈夫曼编码压缩比

10.8.5 真题

10.9 线索二叉树(简单了解)(干扰选项)

10.9.1 真题

11 图

11.1 图的基本概念

11.1.1 图形结构与图的定义

11.1.2 有向图与无向图

11.1.3 完全图

11.1.4 顶点的度

11.1.5 路径

11.1.6 连通图与强连通图

11.1.7 稠密图与稀疏图

11.1.8 真题

11.2 图的存储

11.2.1 邻接矩阵

11.2.2 邻接表

11.2.3 真题

11.3 网

11.4 图的遍历

11.4.1 深度优先搜索(DFS)

11.4.2 广度优先搜索(BFS)

11.4.3 真题

11.5 拓扑排序

11.5.1 真题

12 查找

12.1 查找的基本概念

12.2 顺序查找

12.3 折半查找(二分查找)

12.4 真题

13 哈希表

13.1 哈希表的定义

13.2 哈希函数构造与处理冲突

13.3 装填因子

13.4 真题

14 堆

14.1 小顶堆与大顶堆

14.2 建立小顶堆与大顶堆

14.3 真题

15 排序

15.1 排序基本概念

15.2 插入排序

15.2.1 直接插入排序

15.2.2 希尔排序(了解)

15.2.3 真题

15.3 选择排序(简单了解)

15.3.1 简单选择排序

15.3.2 堆排序

15.3.3 真题

15.4 交换排序

15.4.1 冒泡排序

15.4.2 快速排序

15.4.3 真题

15.5 归并排序

15.5.1 真题

15.6 杂题选讲


1 算法效率的度量

1.1 大O表示法

记“常对幂指阶

大O表示法:

1.2 时间复杂度

时间复杂度估算看最内层循环,如若没有循环和递归则为O(1)。

1.3 空间复杂度

1.4 真题

1.2009年下半年第63题

2.2011年下半年第64题

首先遍历A中所有元素,统计-1、0、1的个数,时间复杂度为O(n),需要三个额外存储空间,空间复杂度为O(1);然后对A重新赋值,时间复杂度为O(n)。

3.2012年上半年第65题

4.2020年下半年第65题

2 渐进符号(简单了解)

渐进上界的括号内要大于等于等式左边的计算结果,渐进下界的括号内要小于等于等式左边的计算结果,渐进紧致界括号内的只能等于等式左边的计算结果。

2.1 真题

1.2012年上半年第62题

3 递归

3.1 递归式时间、空间复杂度

递归算法的时间复杂度:

递归的次数 × 每次递归的时间复杂度(适用于每次递归时间复杂度不变的情况)

如果每次递归的时间复杂度随着n变化而变化则要根据代码来观察


3.2 递归式主方法

记忆三种情况:

3.3 真题

1.2010年上半年第64题

推导可得T(n)=n+(n-1)+……+2+1,所以时间复杂度为O(n^{2})

2.2010年下半年第62题

3.2011年上半年第64题

题目中a=6,b=5,属于第一种情况,所以

4.2011年下半年第65题

5.2009年上半年第63题

展开递归式

因此时间复杂度为O(n^{2})。

问题规模增加16,则运行时间增加16^{2}=256。

6.2011年下半年第64题

4 线性表

4.1 线性结构与线性表定义

4.2 线性表的顺序表示

4.2.1 线性表的顺序存储

线性表的顺序存储又称顺序表。

顺序表优点是可以随机存取表中的元素;缺点是插入和删除操作需要移动大量的元素。

4.2.2 顺序表上基本操作的实现

(1)插入操作

在顺序表L第i个位置插入新元素时,首先要判断i的输入是否合法,不合法,则插入失败;否则,将第i个元素及其后的元素依次后移一个位置, 腾出一个空位置插入新元素,插入成功。

博主的代码在插入时只判断了i的范围是否有效,没有判断存储空间是否已满,下图为王道数据结构书上的代码

插入操作的时间复杂度:

最好情况:在表尾插入,元素后移语句则不执行,时间复杂度为O(1)

最坏情况:在表头插入,元素后移语句执行n次,时间复杂度为O(n)

平均情况时间复杂度为O(n)

(2)删除操作

删除顺序表L第i个位置的元素,首先要判断i的输入是否合法,不合法,则删除失败;否则,删除该元素,并将第i=1个元素及其后的元素依次前移一个位置,删除成功。

删除操作的时间复杂度:

最好情况:删除表尾元素,无需移动元素,时间复杂度为O(1)

最坏情况:删除表头元素,需移动除表头元素外的所有元素,时间复杂度为O(n)

平均情况时间复杂度为O(n)

(3)查找操作

在顺序表L中查找某一元素,并返回其位序。

查找操作(按位查找)的时间复杂度:

最好情况时间复杂度为O(1)

最坏情况时间复杂度为O(1)

平均情况时间复杂度为O(1)

注意:博主讲的是按位查找的情况,因此时间复杂度均为O(1)。

如果为按值查找,那么

最好情况:查找的元素就在表头,仅需比较一次,时间复杂度为O(1)

最坏情况:查找的元素在表尾,需比较n次,时间复杂度为O(n)

平均情况:时间复杂度为O(n)

4.3 线性表的链式表示

4.3.1 线性表的链式存储

线性表的链式存储又称单链表。

4.3.2 单链表上基本操作的实现

(1)插入操作

先检查插入位置的合法性,然后找到待插入位置的前驱结点,在其后插入新结点。

Ⅰ.不带头结点

不带头结点插入操作的时间复杂度:

最好情况时间复杂度为O(1)

最坏情况:插入位置的前驱结点在表尾,时间复杂度为O(n)

平均情况时间复杂度为O(n)

Ⅱ.带头结点

带头结点插入操作的时间复杂度:

最好情况时间复杂度为O(1)

最坏情况时间复杂度为O(n)

平均情况时间复杂度为O(n)

(2)删除操作

将单链表的第i个结点删除,先检查删除位置的合法性,后查找表中第i-1个结点,即被删除结点的前驱结点,再将其删除。

带头结点删除操作的时间复杂度(不带头结点时间复杂度与之相同):

最好情况时间复杂度为O(1)

最坏情况:删除结点在表尾,时间复杂度为O(n)

平均情况时间复杂度为O(n)

(3)查找操作(按位查找)

在单链表中从第一个结点出发,顺指针next域逐个往下搜索。

按位查找操作的时间复杂度:

最好情况时间复杂度为O(1)

最坏情况时间复杂度为O(n)

平均情况时间复杂度为O(n)

4.3.3 循环单链表

循环单链表的插入、删除算法与单链表的几乎一样,不同的是操作在表尾进行。

在单链表中进行查找操作只能从表头结点开始顺序遍历整个链表,而循环单链表可以从表中任意结点开始遍历整个链表。

4.3.4 双链表(只考过1次且为干扰选项)

双链表结点中有两个指针prior和next,分别指向其前驱结点和后继结点。

双链表可以很方便的找到其前驱结点,因此,插入和删除操作的时间复杂度为O(1)。

4.4 真题

1.2009年下半年第60题

一般如果没有给出最好最坏平均时间复杂度的话就默认是平均时间复杂度。

2.2010年上半年第65题

尾指针指向尾结点,因此进行插入时不需要遍历链表,直接在末尾进行插入操作;而进行删除操作时,需要遍历找到其前驱结点。

3.2011年下半年第58题

随机访问是顺序表的特点,链表不能随机访问。

4.2013年下半年第57题

5.2014年上半年第57题

6.2014年下半年第57题

7.2016年下半年第58题

链表不需移动,直接把要删结点的前驱结点接到要删节点的后继结点。

顺序存储删除不同结点需移动的元素数量不同,具体如下:

8.2020年下半年第58题

5 栈

5.1 栈的基本概念

栈是一种先进后出(后进先出)的线性结构,只能在栈的一端(栈顶)进行插入和删除

递归使用栈。

5.2 栈的顺序存储(了解)

采用顺序存储的栈称为顺序栈,它利用一组地址连续的存储单元存放自栈底到栈顶的数据元素,同时附设一个指针(top)指示当前栈顶元素的位置

5.3 栈的链式存储(了解)

5.4 真题

1.2010年上半年第60题

2.2013年上半年第52题

3.2014年下半年第58题

  • 向上取整, 运算称为 Ceiling,用数学符号⌈ ⌉ (上有起止,开口向下)表示。
    等于大于自己的最小整数

  • 向下取整, 运算称为 Floor,用数学符号⌊ ⌋ (下有起止,开口向上)表示。
    等于小于自己的最大整数

(向下取整应该是⌊ ⌋ ,题目中是⌈ ⌋,不太清楚,但是不影响做题)

4.2016年上半年第57题

5.2017年上半年第58题

6.2018年下半年第57题

7.2020年下半年第22题

8.2021年下半年第57题

6 队列

6.1 队列的基本概念

6.2 队列的顺序存储与循环队列

上图情况,会出现“上溢出”,但它不是真正的溢出,是一种“假溢出”,因此引入了循环队列

队首指针进1:(Q->front) = (Q->front + 1) % MAXQSIZE

队尾指针进1:(Q->rear) = (Q->rear + 1) % MAXQSIZE

6.2 队列的链式存储与双端队列(了解)

双端队列是指两端都可以进行入队和出队操作的队列。

6.3 真题

1.2010年下半年第57题

对于此题特殊值代入法比较简单

2.2013年上半年第53题

3.2013年下半年第58题

4.2014年上半年第60题

5.2015年上半年第57题

带特殊值算后发现B、D都符合,然后我们更改队列情况,之前队尾-对头为负数,将其改为正数,会发现B选项上溢出

一般这类题目 +M是防止下溢出, ()%M是防止上溢出,二者缺一不可。

6.2018年上半年第57题

7.2019年上半年第59题

8.2021年下半年第58题

6.4 栈和队列引进

队列为先进先出,那么出队序列就是入队序列;

如果出栈后立马入队,那么出栈序列就是入队序列;

因此,出栈后立马入队,出栈序列就是出队序列

6.5 真题

1.2009年上半年第60题

两个栈可以模拟一个队列的操作,两个队列不能模拟一个栈的操作。

2.2009年下半年第61题

入队序列与出队序列关系为1:1,即入队是什么出队就是什么,一种入队序列只对应一种出队序列。

3.2012年上半年第57题

4.2015年上半年第58题

5.2015年下半年第57题

6.2021年上半年第57题

7 串

7.1 串的定义及基本运算 

7.2 真题

1.2017年上半年第57题

空串不包含任何字符,空格也算字符。

2.2017年下半年第57题

取特殊值,S="ab",长度n=2,子串:a、b,子串个数为2,带入选项排除错误选项,如果没有排除三个选项,则增加串S的长度,再代入排除。

注意:空串是任意串的子串(本题要求子串非空)

7.3 串的模式匹配与朴素模式匹配

子串的定位操作通常称为串的模式匹配,它求的是子串(常称模式串)在主串中的位置

朴素模式匹配

模式串从主串的第一个位置开始比较

如上图,比较第三个位置,发现字符不相同,接着从当前位置的下一个位置继续比较

(上图)发现第一个字符不相同,继续后移一位进行比较

(上图)发现第一个字符不相同,继续后移一位进行比较

(上图,上图与前面几幅图主串最后一个字符不同,是博主为了展示匹配成功,修改了字符c为e)比较发现模式串与主串字符都相同,则返回当前位置(箭头指向字符的位置)

朴素模式匹配(n为主串长度,m为模式串长度)

时间复杂度:

最好情况时间复杂度为O(m)

最坏情况时间复杂度为O(mn)

平均情况时间复杂度为O(n+m)

比较次数:

最好情况m次

最坏情况(n-m+1)×m次

平均情况\frac{1}{2}(n-m+1)次

7.4 手算next数组值

只在11下半年、12上半年、14下半年上午题考过三次(博主可能22年发布的视频,所以22、23不确定),15-21年都没考,会求即可,不用深入了解。

该部分博主讲的比较术语话,建议只为了做题可以去看王道数据结构求next数组的视频,或在b站搜索其他博主的视频,相对来说更适合快速做题。(以下为听王道课程理解的方法)

next[1]无脑写0、next[2]无脑写1

其他next[]:在当前匹配失败的位置前划一根分界线,接下来模式串一步一步往右移,直到分界线前“能对上”,或模式串完全跨过分界线为止,此时j指向哪,next数组值就是多少。

7.5 KMP(简单了解)

7.6 真题

1.2012年下半年第57题

2.2011年下半年第57题

比较题目的选项,发现倒数第二位,即第七位不同,那么我们可以直接求next[7],可以更快选出答案,如果怕错可以都算出来和题目选项对照选择正确答案。

3.2012年上半年第58题

4.2014年下半年第60题

8 数组

8.1 一维数组(了解)

一维数组可视为一个线性表

8.2 二维数组

二维数组可视为其元素也是定长线性表的线性表

8.3 数组计算公式与特性

n行n列的二维数组,当i=j时,其偏移量相同。

8.4 真题

1.2011年下半年第21题

方法一:套公式;

方法二:如上图笔记,取特值。

2.2012年上半年第21题

3.2016年下半年第22题

9 特殊矩阵

9.1 对称矩阵

设有一个n×n的矩阵,若矩阵中的任意一个元素都有A_{i,j}=A_{j,i},则该矩阵为对称矩阵

9.2 三对角矩阵

三对角矩阵的所有非零元素都集中在以主对角线为中心的3条对角线的区域,以他区域的元素都为0,如下图所示。

9.3 稀疏矩阵

三元组顺序表和十字链表是对稀疏矩阵进行压缩存储的方式。(21上考过1次)

三元组:

十字链表:

9.4 真题

1.2010年上半年第58题

方法一:套公式;

方法二:如上图笔记,取特值。

2.2011年上半年第57题

3.2015年下半年第58题

4.2018年上半年第58题

5.2019年上半年第57题

6.2011年下半年第64题

7.2021年上半年第59题

10 树

10.1 树的基本概念

10.1.1 树的定义

10.1.2 树的基本概念

10.1.3 树的性质

树中的结点数(所有结点数之和)=所有结点的度数之和(总分支数)+ 1

10.1.4 真题

1.2010年下半年第61题

2.2019年下半年第59题

10.2 二叉树

10.2.1 二叉树定义

10.2.2 二叉树性质

10.2.3 满二叉树与完全二叉树

满二叉树除叶子结点外的每个结点度数均为2。

10.2.4 真题

1.2011年下半年第60题

2.2012年上半年第59题

3.2013年上半年第64题

4.2016年上半年第59题

5.2016年下半年第60题

6.2019年上半年第58题

记不住公式的话,已经考察过 3个结点5种形态,4个结点14种形态

推测下一次考5个结点,如下:5个结点42种形态

7.2021年上半年第63题

10.3 二叉树的存储结构

10.3.1 二叉树的顺序存储

顺序存储需要维护结点和左、右孩子的关系:结点编号为n,则左孩子为2n,右孩子为2n+1。

10.3.2 二叉树的链式存储

链式存储有二叉链表和三叉链表。

对于n个结点的二叉树,二叉链表的空指针为n+1,三叉链表的空指针为n+2。(考过一次)

10.3.3 真题

1.2009年上半年第61题

2.2014年上半年第58、59题

3.2017年下半年第59题

4.2018年上半年第59题

10.4 二叉树遍历

先序遍历:根左右

中序遍历:左根右

后序遍历:左右根

层序遍历:从上到下、从左往右依次遍历

10.4.1 二叉树的先序遍历

10.4.2 二叉树的中序遍历

10.4.3 二叉树的后序遍历

10.4.4 二叉树的层序遍历

10.5 根据遍历序列构造二叉树

10.5.1 先序+中序构造二叉树

10.5.2 后序+中序构造二叉树

10.5.3 层序+中序构造二叉树(了解)

注意:先序+后序不能确定唯一的二叉树。

10.5.4 真题

1.2009年下半年第57、58题

2.2012年下半年第58题

3.2015年下半年第59题

4.2017年上半年第64题

5.2018年下半年第58题

6.2019年下半年第58题

10.6 平衡二叉树

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

10.7 二叉排序树

10.7.1 二叉排序树定义

10.7.2 二叉排序树构造

插入结点的过程:若原二叉排序树为空,则直接插入结点;否则,若关键字k(需要插入的值)小于根节点值,则插入到左子树,若关键字k大于根节点值,则插入到右子树。

10.7.3 真题

1.2010年上半年第63题

2.2014年下半年第59题

3.2016年上半年第58题

4.2016年下半年第61题

5.2018年下半年第59题

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

10.8.1 最优二叉树基本概念

10.8.2 构造最优二叉树

上图规则在软考中可能找不到答案,需用下文的规则。

哈夫曼树中权值越大的结点离根结点越近,权值越小的结点离根结点越远。

哈夫曼树只有度为0和度为2的结点,没有度为1的结点。

n个权值构造的哈夫曼树具有2n-1个结点。

在软考中要使用上图方法来构造哈夫曼树,接下来举例说明如何构造:

第一步,找到权值最小的两个为4和8

第二步,将上图中的红色12放在末尾,接着找到权值最小的两个为黑色12和红色12

第三步,将上图中的24放在末尾,接着找到权值最小的两个为18和24

第四步,将上图中的42放在末尾,接着找到权值最小的两个为26和32

第五步,将上图中的58放在末尾,接着找到权值最小的两个为42和58

10.8.3 哈夫曼编码定义

10.8.4 哈夫曼编码压缩比

压缩比是求等长编码到哈夫曼编码压缩了多少。

等长编码:2^{x}\geqslanta,b,c……几个字符,求出x。

10.8.5 真题

1.2010年上半年第59题

2.2010年下半年第58题

3.2011年下半年第61题

4.2012年下半年第64、65题

5.2013年下半年第60题

6.2014年下半年第64、65题

7.2016年下半年第62、63题

8.2017年下半年第58题

9.2019年下半年第64、65题

10.2020年下半年第57题

11.2021年下半年第65题

10.9 线索二叉树(简单了解)(干扰选项)

10.9.1 真题

1.2011年上半年第59题

2.2015年上半年第59题

3.2021年上半年第58题

11 图

11.1 图的基本概念

11.1.1 图形结构与图的定义

11.1.2 有向图与无向图

无向图:连接顶点的边是无向边

有向图:连接顶点的边是有向边(弧)

11.1.3 完全图

11.1.4 顶点的度

11.1.5 路径

11.1.6 连通图与强连通图

11.1.7 稠密图与稀疏图

11.1.8 真题

1.2011年下半年第59题

2.2020年下半年第64题

11.2 图的存储

11.2.1 邻接矩阵

邻接矩阵

邻接矩阵更适合存储稠密图(边数很多的图)

完全图(每个顶点都和剩余的顶点有一条边)更适合采用邻接矩阵存储

无向图邻接矩阵:非零元素个数为2e(e为边数)

无向图的邻接矩阵是对称矩阵

对于无向图,顶点i的度等于邻接矩阵第i行(列)中非零元素个数

有向图邻接矩阵:非零元素个数为e(e为边数)

有向图的邻接矩阵不一定是对称矩阵

对于有向图,顶点i的出度等于第i行非零元素个数,入度等于第i列非零元素个数,顶点i的度=顶点i的出度+入度

11.2.2 邻接表

邻接表更适合存储稀疏图(边数很少的图)

无向图采用邻接表存储有2e个表结点(e为边数)

有向图采用邻接表存储有n+e个表结点(n为结点数,e为边数)

11.2.3 真题

1.2011年上半年第60题

2.2012年上半年第60题

3.2015年下半年第61题

4.2019年下半年第61题

11.3 网

11.4 图的遍历

11.4.1 深度优先搜索(DFS)

基本思想:访问v→与v相邻且未被访问的v1→与v1相邻且未被访问的v2(类似于树的先序遍历)

11.4.2 广度优先搜索(BFS)

基本思想:以v为起点,由进至远依次访问和v有路径且路径长度为1,2……的顶点(也就是先访问v,接着访问v的所有邻接点,再访问邻接点的所有邻接点,类似于二叉树的层序遍历)

使用队列对图进行广度优先遍历

11.4.3 真题

1.2009年下半年第59题

2.2016年上半年第61题

3.2017年下半年第60题

无向连通图是保证任意两个顶点之间均有路径存在。

任意两个顶点之间均有边存在是完全图的定义。

4.2011年下半年第64题

5.2018年下半年第60、61题

6.2020年下半年第60、61题

11.5 拓扑排序

拓扑排序的步骤就是在AOV网中找一个没有前驱的顶点并输出,然后删除该顶点和以他起点的所有边,接着一直重复上述步骤。

11.5.1 真题

1.2010年下半年第59题

遇到这类题目,直接比对选项,因为拓扑序列可能不唯一。

2.2012年下半年第60题

3.2013年下半年第59题

4.2016年下半年第57题

5.2021年下半年第61题

12 查找

12.1 查找的基本概念

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

动态查找表有:二叉排序树,平衡二叉树,B_树,哈希表

12.2 顺序查找

顺序查找方法既适用于顺序存储结构,也适用于链表结构

顺序查找最多比较n次

顺序平均查找长度为(n+1)/2

12.3 折半查找(二分查找)

二分查找去中值默认下取整,下取整没有正确答案时再考虑上取整。

12.4 真题

1.2009年上半年第57题

2.2010年上半年第57题

3.2010年下半年第60题

注意:下取整找不到答案要用上取整

4.2011年上半年第58题

5.2012年下半年第59题

6.2014年上半年第61题

7.2015年上半年第60题

方法一:分别以每个选项模拟折半查找过程,查找每个选项最后一个数字,看是否符合

方法二:折半查找的规律是查找过程中的关键字序列要么一次比一次大(小),要么一大一小(一小一大)

8.2015年下半年第60题

9.2016年上半年第60题

10.2017年上半年第61题

11.2019年上半年第61题

12.2011年下半年第64题

13 哈希表

13.1 哈希表的定义

13.2 哈希函数构造与处理冲突

13.3 装填因子

13.4 真题

1.2010年上半年第62题

2.2011年上半年第61题

3.2013年上半年第65题

4.2013年下半年第61题

5.2018年上半年第60题

6.2019年上半年第60题

6.2021年上半年第60题

同义词是不相同的两个关键字的哈希值相同。

14 堆

14.1 小顶堆与大顶堆

14.2 建立小顶堆与大顶堆

14.3 真题

1.2017年上半年第60题

2.2021年上半年第62题

3.2021年下半年第60题

15 排序

15.1 排序基本概念

15.2 插入排序

15.2.1 直接插入排序

直接插入排序:

最好的情况是待排序序列是基本有序的序列,时间复杂度为O(n)

最坏的情况是待排序序列是逆序,时间复杂度为O(n^{2})

15.2.2 希尔排序(了解)

补充:计数排序(计数排序不属于插入排序)

15.2.3 真题

1.2010年上半年第61题

C选项基本有序,比较次数最少。

2.2012年下半年第62、63题

3.2015年下半年第64、65题

4.2017年下半年第64、65题

15.3 选择排序(简单了解)

15.3.1 简单选择排序

15.3.2 堆排序

堆排序可以进行归位,即每次都可以确定一个的元素最终位置。

15.3.3 真题

1.2014年下半年第63题

直接插入排序稳定;简单选择排序不稳定。

2.2015年上半年第61题

15.4 交换排序

15.4.1 冒泡排序

15.4.2 快速排序

快速排序是一种基于分治的算法,每趟排序可以确定一个元素的最终位置(即归位)。

快速排序最坏的情况是待排序序列基本有序,时间复杂度为O(n^{2}),空间复杂度为O(n)。

以第一个元素为基准元素就 先从后往前找 再从前往后找

以最后一个元素为基准元素就 先从前往后找 再从后往前找

15.4.3 真题

1.2009年下半年第65题

B、C选项基本有序,可以先排除。

2.2013年下半年第62、63题

3.2014年下半年第61、62题

4.2020年下半年第62、63题

15.5 归并排序

15.5.1 真题

1.2009年上半年第65题

2.2011年上半年第65题

3.2012年上半年第61题

4.2013年上半年第62、63题

5.2017年下半年第61题

6.2021年下半年第62、63题

7.2019年下半年第62题

8.2011年下半年第64题

15.6 杂题选讲

1.2009年上半年第58题

2.2009年上半年第59题

3.2009年上半年第62题

4.2009年下半年第62题

5.2012年下半年第61题

6.2013年上半年第51题

7.2014年上半年第64、65题

8.2015年上半年第62、63题

9.2015年上半年第64、65题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值