[课程复习] 数据结构之线性表、树、图、查找、排序经典算法复习

2023-11-17

作者最近在复习考博,乘此机会分享一些计算机科学与技术、软件工程等相关专业课程考题,一方面分享给考研、考博、找工作的博友,另一方面也是自己今后完成这些课程的复习资料,同时也是在线笔记。基础知识,希望对您有所帮助,不喜勿喷~

无知•乐观•低调•谦逊•生活
无知的我需要乐观的去求知,低调的底色是谦逊,而谦逊是源于对生活的通透,我们不止有工作、学习、编程,还要学会享受生活,人生何必走得这么匆忙!成都倒计时,加油,补充几张好看的框架图给大家。书阁觅知音,浔声只倾心。

参考前文:
[课程复习] 数据结构之经典题目回顾 (一)选择题、填空题1

一.线性表

示例1:删除但列表中的相同节点元素。

二. 树和二叉树

1.二叉树

2.遍历二叉树

举例:

设某棵二叉树的中序遍历序列为ABCD,前序遍历序列为CABD,则后序遍历该二叉树得到序列为( )。
解析:
通过中序遍历和前序遍历可以将树构建出来,再求其后序遍历结果。
前序遍历(先根排序),故C为根节点,再看中序遍历可知,AB为C的左子树,D为其右子树。AB - C - D
前序遍历第二个节点为A,则A为根节点,再看中序遍历B在A后面,则B为右子树,最终构建树如下图所示。
答案:后序遍历结果为 BADC。

代码:

3.哈夫曼树

举例:

设一组权值集合W=(15,3,14,2,6,9,16,17),要求根据这些权值集合构造一棵哈夫曼树,则这棵哈夫曼树的带权路径长度为( )。


三. 图

1.图的存储结构

2.DFS和BFS

DFS:深度优先搜索

DFS代码:

// DFS的递归实现
void DFS_Recursive(Node* pRoot)
{
    if (pRoot==NULL)
        return;
    cout<<pRoot->nVal<<" ";
 
    if (pRoot->pLeft!=NULL) 
        DFS_Recursive(pRoot->pLeft);
 
    if (pRoot->pRight!=NULL)
        DFS_Recursive(pRoot->pRight);
}

BFS:广度优先搜索

举例:

3.最小生成树

Prim算法

克鲁斯卡尔(Kruskal)算法

设连通网 N = ( V, {E} )。

  1. 初始时最小生成树只包含图的n个顶点,每个顶点为一棵子树;
  2. 选取权值较小且所关联的两个顶点不在同一子树的边,将此边加入到最小生成树中;
  3. 重复2)n-1次,即得到包含n个顶点和n-1条边的最小生成树。

4.有向无环图-拓扑排序

拓扑排序:把AOV网络中所有顶点按照它们相互之间的优先关系排列成一个线性序列的过程。

拓扑排序的应用:是检测AOV网中是否存在环的有效方法。

5.最短路径

Dijkstra算法

Floyd算法


四. 查找

1.静态查找-折半查找

如下图所示,表示折半查找的过程:

对应的代码如下所示:(背)

举例:

设一组有序的记录关键字序列为(13,18,24,35,47,50,62,83,90),查找方法用二分查找,要求计算出查找关键字62时的比较次数并计算出查找成功时的平均查找长度。
解析:其计算过程如下图所示。
答案:2,ASL = (1 * 1 + 2 * 2 + 3 * 4 + 4 * 2) / 9 = 25/9。

索引顺序表的查找:

2.动态查找-二叉排序树

二叉排序树

二叉排序树是一棵空树,或者是具有下列性质的二叉树:
(1) 若左子树不空,则左子树上所有结点的值均小于根结点的值;
(2) 若右子树不空,则右子树上所有结点的值均大于根结点的值;
(3) 根结点的左、右子树也分别为二叉排序树。

二叉排序树的删除操作:

举例:

设一组初始记录关键字序列为 (20 , 12 , 42 , 31 , 18 , 14 , 28) ,则根据这些记录关键字构造的二叉排序树的平均查找长度是_________。

平衡二叉树

3.哈希表

常用的解决冲突的方法:
(1) 开放地址法(线性探测再散列、二次探测再散列、随机探测再散列);
(2) 链地址法;
(3) 再哈希法;
(4) 建立一个公共溢出区。

举例:

设散列表的长度为8,散列函数H(k)=k % 7,用线性探测法解决冲突,则根据一组初始关键字序列(8,15,16,22,30,32)构造出的散列表的平均查找长度是________。

余数:0 1 2 3 4 5 6 7
8:8%7=1,1次
15:15%7=1,冲突+1,2次
16:16%7=2,与15冲突,2次
22:22%7=1,冲突3次,4次
30:30%7=2,冲突3次,4次
32:32%7=4,冲突2次,3次
故:(1 + 2 + 2 + 4 + 4 + 3)/6 = 8/3


五. 排序

1.排序对比

举例:

在快速排序、堆排序、归并排序中, 归并 排序是稳定的。
解析:
稳定排序:直接插入排序、冒泡排序、归并排序、基数排序
不稳定排序:希尔排序、直接选择排序、堆排序、快速排序

2.快速排序

核心思想:两端向中间比较,并交换顺序

下面是一个简单的示例:

代码实现:

/*
 * 快速排序
 *
 * 参数说明:
 *     a -- 待排序的数组
 *     l -- 数组的左边界(例如,从起始位置开始排序,则l=0)
 *     r -- 数组的右边界(例如,排序截至到数组末尾,则r=a.length-1)
 */
void quick_sort(int a[], int l, int r)
{
    if (l < r)
    {
        int i,j,x;

        i = l;
        j = r;
        x = a[i];
        while (i < j)
        {
            while(i < j && a[j] > x)
                j--; // 从右向左找第一个小于x的数
            if(i < j)
                a[i++] = a[j];
            while(i < j && a[i] < x)
                i++; // 从左向右找第一个大于x的数
            if(i < j)
                a[j--] = a[i];
        }
        a[i] = x;
        quick_sort(a, l, i-1); /* 递归调用 */
        quick_sort(a, i+1, r); /* 递归调用 */
    }
}

举例1:

设一组初始关键字记录关键字为(20,15,14,18,21,36,40,10),则以20为基准记录的一趟快速排序结束后的结果为( )。
A.10,15,14,18,20,36,40,21
B.10,15,14,18,20,40,36,21
C.10,15,14,20,18,40,36,2l
D.10,15,14,18,20,36,40,21
解析:第一趟快排如下
20,15,14,18,21,36,40,10 => 右边开始,找到小于20的10,交换次序
10, 15,14,18,21,36,40,() => 左边继续,找到大于20的21,交换次序
10,15,14,18,(),36,40,21 => 右边继续找小于20的数字,找到()处停止
10,15,14,18,20,36,40,21 => 输出第一趟快速排序结果,故选D。

举例2:

设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为( 3,2,5,6,8 )。
解析:
快速排序5为基准,基本规则如下:left=5,right=8,先遍历right,寻找比基准5小的数字左移;找到之后与左边left下标替换,接着left向右移动,寻找比基准5大的数字,找到之后替换,最后left=right时,该数字与基准替换。
初始:5 2 6 3 8,right寻找到3,与left=5交换位置
接着:3 2 6 () 8,left从左边移动,找到6,与()替换位置
接着:3 2 () 6 8,此时向左移动right,right=left,停止快速排序,并用()替换基准5。
输出:3 2 5 6 8,其为第一趟快速排序的结果。

3.选择排序

核心思想:选择最小、最大值并交换顺序

举例:

初始值为(38, 65, 97, 76, 13, 27, 10) 经过第3趟选择排序的最小值结果为___________。
解析
第一趟结果:寻找最小值并交换顺序
10 65 97 76 13 27 38
第二趟结果:寻找第二个最小值并与第二个位置交换顺序
10 13 97 76 65 27 38
第三趟结果:寻找第三个最小值并与第三个位置交换顺序
10 13 27 76 65 97 38

4.冒泡排序

核心思想:两两比较,交换顺序,每次能在最后一个位置获得最大值或最小值

举例:

初始值为(38, 65, 97, 76, 13, 27, 10) 经过第3趟冒泡排序的最小值结果为___________。
解析
第一趟结果:
38 65 76 13 27 10 97
第二趟结果:
38 65 13 27 10 76 97
第三趟结果:
38 13 27 10 65 76 97

5.插入排序

核心思想:寻找相应位置按顺序插入元素

算法实现过程:

插入排序之希尔排序:

6.合并排序

核心思想:分而治之再归并数据

举例:

设一组初始记录关键字序列为(55,63,44,38,75,80,31,56),则利用筛选法建立的初始堆为___________________________。
答案:(31,38,54,56,75,80,55,63)


(By:Eastmount 2019-03-11 深夜9点 http://blog.csdn.net/eastmount/ )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[课程复习] 数据结构之线性表、树、图、查找、排序经典算法复习 的相关文章

  • PageHelper的概述和基本使用

    PageHelper介绍 PageHelper是国内非常优秀的一款开源的mybatis分页插件 它支持基本主流与常用的数据库 例如mysql oracle mariaDB DB2 SQLite Hsqldb等 本项目在 github 的项目

随机推荐

  • 线与逻辑详解

    什么是线与逻辑 需要和CMOS漏极开路门 Open Drain OD 一起介绍 通常CMOS门电路都有反相器作为输出缓冲电路 而在工程实践中 有时需要将两个门的输出端并联以实现 与 逻辑的功能称为 线与 逻辑 或者用于驱动大电流负载 或者实
  • 第一章 webpack与构建发展简史

    官方loader和插件 Loaders webpack Plugins webpack 为什么需要构建工具 初识webpack webpack默认配置文件 webpack config js 可以通过webpack config
  • 数据结构-图的创建(邻接矩阵,邻接表)C语言实现

    图的定义 图 Graph G由两个集合V和E组成 记为 G V E 其中V是顶点的有穷非空集合 其实就是顶点 E是V中顶点偶对的有穷集合 就是边 V G 和E G 通常分别表示图G的顶点集合以及边集合 E G 可以为空集合 但是此时的图只有
  • 502 Bad Gateway The proxy server received an invalid response from an upstream server

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 打开网站一直报错 查看了一下nginx错误日志 发现很多的报错 2018 12 24 11 02 51 alert 20026 20026 33113943 socket
  • 【渗透测试笔记】之【内网渗透——Windows系统散列值获取与防范】

    拓扑图 Windows系统散列值获取 1 通过CS模块获取用户凭证信息 在获取到目标主机权限后 我们可以抓取hash和dump明文密码 这两项功能都需要管理员权限 如果权限不足 先要进行提权操作 抓取密码哈希 右键被控主机 gt Acces
  • 【OpenCV学习笔记】【教程翻译】五 (车牌识别之OCR分割)

    车牌识别 车牌识别的第二步主要是提取出车牌中的字符 对于每个被检测出的车牌 我们对车牌进行分割获取每个字符 然后用神经网络机器学习算法实现字符的识别 在这个过程中 我们也可以学习到如何评估一个分类算法 OCR分割 首先 我们将车牌图像作为具
  • sqli-labs 21——40关攻略

    Less 21 基于错误的复杂的字符型Cookie注入 base64编码 单引号 报错型 cookie型注入 本关和less 20相似 只是cookie的uname值经过base64编码了 登录后页面 圈出来的地方显然是base64加密过的
  • 浅谈Linux的文件系统, 新增XFS.Ext3.GFS.ReiserFS.JFS相关知识

    如果您是一位新手 也许 您还不知道如何把文件从Windows拷贝到 Linux上吧 下面 我们将说明Unix文件系统以及mount的工作过程 然后再比较详细地讨论 mount的使用和有关选项 如果您已经了解Unix文件系统是如何工作的 那么
  • debug调试神器pysnooper

    异常bug定位 print 函数也可以 但效率上还是慢 后来发现了一个叫PySnooper的装饰器 一般debug调试 都是在我们可能觉得会有问题的地方 去打印输出 看下实际输出了什么 然后思考问题所在 下载库 pip install py
  • python3 练习题100例 (十二)

    题目十二 打印出所有的 水仙花数 所谓 水仙花数 是指一个三位数 其各位数字立方和等于该数本身 例如 153是一个 水仙花数 因为153 1的三次方 5的三次方 3的三次方 usr bin env python3 coding utf 8
  • “ModuleNotFoundError: No module named sklearn”解决办法

    最近在跑实验的时候 需要导入sklearn 但是运行代码一直提示 ModuleNotFoundError No module named sklearn 实验中导入sklearn的代码 from sklearn import metrics
  • Linux CentOS7 中 完美解决VMTools失效,windows 与 Liunx间完美复制文件,无报错的解决方案

    问题 我也是才刚使用CentOS7没多久 搭建好环境后出现比较头疼的问题就是 Windows 和 Linux 之间无法复制粘贴文本和文件 这个问题只要在虚拟机中安装 VMTools 就能解决 但是不知道什么原因导致 我在CentOS 6 8
  • Linux 狂神说学习笔记

    狂神说linux Linux 基本目录 目录相关命令 文件属性 查看文件 硬链接和软链接 vim 账号管理 用户组管理 磁盘管理 进程管理 环境安装 基本目录 目录相关命令 ls al 列出目录 a所有文件包括隐藏文件 l列出所有文件包括文
  • MyBatis ognl.NoSuchPropertyException 或者 Invalid bound statement (not found)

    描述 SpringBoot Mybatis plus 项目 运行时出现如下错误 ognl NoSuchPropertyException 没有对应属性异常 Invalid bound statement not found 绑定语句无效 未
  • 问题小结(3)-dialog标题居中

    dialog标题居中问题 用系统的AlertDialog Builder创建dialog时 如果需要将dialog的title居中显示 需要调用 setCustomTitle View view 方法 对需要设置的view设置居中的相关属性
  • zookeeper 分布式共享锁的流程图

    1分布式共享锁的流程图 原理 package cn itcast bigdata zklock import java util Collections import java util List import java util Rand
  • 水球图 及各种参数设置

    水球图 Liquid Fill Chart 是Echarts的一个插件 在官方文档中没有 可以用来优雅的展示百分比数据 水球图 gif 安装 HTML中引入水球图
  • docker基础1——架构组成、安装配置

    文章目录 一 发展起源 1 1 传统虚拟化与容器虚拟化 1 2 docker底层核心技术 1 2 1 命名空间 1 2 2 控制组 1 3 docker工作方式 1 4 docker容器编排 1 5 docker优劣势 1 6 docker
  • iframe的替代品

    面试题 使用过iframe框架 那你对于iframe框架的优缺点知道多少 并且由于iframe的一些缺点 国内外针对这个框架的替代品你知道有哪些呢 知识点1 iframe框架的优缺点 优点 1 可以跨域请求其他网站 并将网站完整展示出来 2
  • [课程复习] 数据结构之线性表、树、图、查找、排序经典算法复习

    作者最近在复习考博 乘此机会分享一些计算机科学与技术 软件工程等相关专业课程考题 一方面分享给考研 考博 找工作的博友 另一方面也是自己今后完成这些课程的复习资料 同时也是在线笔记 基础知识 希望对您有所帮助 不喜勿喷 无知 乐观 低调 谦