• 7数据结构与算法基础——软件设计师


    一、数组与矩阵

    1、数组
    • 存储地址的计算(按行、列存储)

    在这里插入图片描述

    i一般从0开始计,len取决于每一个数组元素占用的字节数。

    不用记以上公式,其实就是a+数组元素所在单元格序号x字节数

    如上题,在5行5列数组中(各元素占2字节),a[2] [3 ]即a+13x2;偏移量13为从0到a[2] [3 ]的数组元素

    2、稀疏矩阵

    数据中大部分数据为0,用稀疏矩阵能省空间
    在这里插入图片描述

    例题:

    在这里插入图片描述

    记公式难,应对考试快捷法:代入法,随便代几个数排除错误(正确的 不一定正确,错的一定错)

    此题,代A0,0可排除BC,代A1,1可排除D

    二、数据结构的定义

    • 著名数据结构:栈和队列(必考)

    在这里插入图片描述

    1、线性表(线性结构的基本表现)

    在这里插入图片描述
    在这里插入图片描述

    • 链表的基本操作(一般不考到双链表的难度)

    在这里插入图片描述

    • 顺序存储与链式存储的对比
      在这里插入图片描述
    栈和队列

    在这里插入图片描述

    循环队列队满和队空都是head,tail指向统一节点,两种解决方案:1.记录队满还是队空(麻烦);2.空间中少存一个元素(更常用)

    栈和队列结合例题:
    在这里插入图片描述

    三、广义表

    (了解基本概念和操作)
    在这里插入图片描述

    四、树与二叉树

    (每次必考)

    1、概念:

    在这里插入图片描述

    结点的度: 每个结点的度等于其孩子节点的个数,如①结点的度为2(②、③)

    树的度:树的度为所有结点度数最高的,上题树的度是2

    叶子结点:没有孩子结点的结点,如⑦、⑧

    分支结点:有分支的结点

    内部结点:非叶子结点且非根结点的结点(夹在中间的)

    父结点:父结点和子结点是相对的概念,如②是④父结点,④是②的子结点,但②又是①的子结点

    子结点:

    兄弟节点:同一父结点

    层次:把树分为一层一层

    2、二叉树中几种特殊的二叉树:

    满二叉树与完全二叉树
    在这里插入图片描述

    满二叉树:整棵树没有缺失的部分

    完全二叉树:除了最底下一层,都是满的,而且底下从左到右排,缺的是右边的(不存在中间缺,右边还有)

    3、遍历二叉树

    层次遍历:一层一层,从左到右

    前中后遍历是指访问根节点的先后

    在这里插入图片描述

    前序遍历:根左右; 中序遍历:左根右; 后序遍历:左右根

    4、反向构造二叉树

    知道遍历序列还原二叉树

    有前序中序,或中序后序都能推出,但只有前序后序不能推出

    在这里插入图片描述

    5、数转二叉树

    (左孩右兄)
    在这里插入图片描述

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

    也是一种比较特殊的二叉树

    在这里插入图片描述

    7、最优二叉树(哈夫曼树)

    工具树,用于哈夫曼编码
    在这里插入图片描述

    树的路径长度:树中一个结点到另一个结点之间的分支(累加起来的长度),如15到8路径长度为3

    权:某个叶子节点中字符出现的频度(结点子树在整个树中所占的比例.)

    带权路径长度(树的代价):路径长度×权 (如15到2:2×2)

    构造一棵哈夫曼树的理念:为让其总的带权路径长最短,如上例第一课数为40,第二棵为25.

    8、线索二叉树

    二叉树的基础上加虚线把很多节点串起来(对于有空子节点的结点而言),方便遍历
    在这里插入图片描述

    前序线索二叉树:根据前序遍历的序列,在结点的前后结点分别为其前继和后继(如下图示例)

    中序后序同理

    在这里插入图片描述

    9、平衡二叉树

    因为越平衡查找效率越高
    在这里插入图片描述

    平衡度:左子树-右子树 (如上例中结点5,为1-0=1)

    不平衡二叉树如何调整:思路为对折,把位于不平衡的结点放在比较中间或者直接作为根节点。

    五、图

    (了解基本概念、皮毛)

    树和图最大区别,树不形成环路

    1、概念

    在这里插入图片描述

    2、图的存储主要有两种

    ①邻接矩阵
    在这里插入图片描述

    无向图的邻接矩阵有对称性(对角)

    • ②领接表

    在这里插入图片描述

    3、图的遍历

    一个纵向一个横向
    在这里插入图片描述

    按领接的顺序遍历,广度优先:0(0,4,3,1)其中4又有0 (6,1,0)但6,1都访问过了,即4(6)
    在这里插入图片描述

    4、图——拓扑排序

    可表示事件的先后执行顺序
    在这里插入图片描述

    都由0开始(0不受约束) 选择题(哪个不是拓扑排序)

    5、图的最小生成树

    ①普里姆算法

    把图的线(剩n-1条,n为点数)去掉留下若干条(留下来的边权值较小),然后连起来
    在这里插入图片描述

    如上题,留与A相连权值最小的B;与B权值相连的线和与A相连的线(除AB线外,已入选)权值最小的AE(200);与A、B、E相连的…;所有点都有线相连时即为最小生成树。

    相同权值时,考虑其是否可能形成环路,形成环路的不相连

    ②克鲁斯卡尔算法(更简单)
    在这里插入图片描述

    选5条最短的边

    六、排序与查找

    • 查找
    1、顺序查找

    逐个比对

    在这里插入图片描述从头到尾一个个对比

    2、二分查找

    在这里插入图片描述

    前提:查找的关键字的序列为有序排列(升/降序)

    列题:
    在这里插入图片描述

    查找范围内未比较过的最大最小的下标的和的中间值,下标中间值取整(不是四舍五入,是直接去小数)
    在这里插入图片描述
    在这里插入图片描述

    3、查找—散列表

    在这里插入图片描述

    散列函数:key%p(key题中关键码);冲突时两种√√处理办法:线性探测法一直往下走;

    • 排序(每次必考,上下午都可能考)

    在这里插入图片描述

    1、直接插入排序

    即一个和全部对比(低配版冒泡)

    在这里插入图片描述

    2、(shell)希尔排序

    分组,组内排序(顺序不对的交换位置);最后距离为1,即全部为1组了,经过前面的排序已经基本有序了,相比直接排序挪动的次数减少。
    在这里插入图片描述

    3、直接选择排序

    选择未选择过的最小的依次交换在前面

    在这里插入图片描述

    4、堆排序

    (最复杂)

    • 概念
      在这里插入图片描述

    • 堆排序基本操作

    思想:建立堆,取走堆顶,重建堆,取走堆顶,直到全部取完即完成排序(比直接排序选择高效)

    适合于对一部分数据排序的情况,每一轮会选出一个

    1.初建堆:先按完全二叉树把所有结点排成树,再调整(从最后一个非叶子结点开始调整)
    在这里插入图片描述

    2.取堆顶,重建堆(把最后的结点补在堆顶,再调)过程,

    在这里插入图片描述

    5、冒泡排序

    思想概念:

    在这里插入图片描述

    6、快速排序

    定一个数为基准,然后其他数跟其对比(如小的在其左,大的在其由,踢皮球的方式),把数据分为两组,两组中有继续分…

    在这里插入图片描述

    7、归并排序法

    在这里插入图片描述

    8、基数排序

    (较少考)

    拆分位数排序,个十百…

    在这里插入图片描述

    各排序的复杂度及稳定性

    (常考)

    在这里插入图片描述

    七、算法基础及常见的算法

    (选择题【操作、流程】)

    • 算法基础

    1、算法特性
    在这里插入图片描述

    2、算法的复杂度

    主要两个维度
    在这里插入图片描述

    常数级复杂度都用O(1)表示[即O(3)也是O(1)] ;整个算法的复杂度为算法中最高的复杂度

    O(log2n)如查找二叉树中,n为层数。

  • 相关阅读:
    vscode的快捷键
    SSM的教务管理系统(免费源码获取)
    k8s--docker状态码(很重要)
    elementUI大文件分片上传
    3D数字孪生
    Servlet
    redis客户端Jedis和Lettuce
    Linux驱动开发 数据的传输和辅助信息的作用
    Ubuntu上搭建FTP服务
    Unirech腾讯云代充-云服务器登陆及远程连接常见问题
  • 原文地址:https://blog.csdn.net/weixin_53920044/article/details/127093919