软件设计师_数据结构与算法基础_学习笔记

文章目录

  • 6.1 数组与矩阵
    • 6.1.1 数组
    • 6.1.2 稀疏矩阵
  • 6.2 线性表
    • 6.2.1 数据结构的定义
    • 6.2.2 顺序表与链表
      • 6.2.2.1 定义
      • 6.2.2.2 链表的操作
    • 6.2.3 顺序存储和链式存储的对比
    • 6.2.4 队列、循环队列、栈
      • 6.2.4.2 循环队列队空与队满条件
      • 6.2.4.3 出入后不可能出现的序列练习
    • 6.2.5 串
    • 6.2.6 广义表
  • 6.3 树与二叉树
    • 6.3.1 基本概念
    • 6.3.2 满二叉树与完全二叉树
    • 6.3.3 二叉树的重要性质
    • 6.3.4 二叉树的遍历
    • 6.3.5 方向构造二叉树
    • 6.3.6 树转二叉树
    • 6.3.7 查找二叉树(排序二叉树)
    • 6.3.8 最优二叉树(哈夫曼树)
    • 6.3.9 线索二叉树
    • 6.3.10 平衡二叉树
  • 6.4 图
    • 6.4.1 图的概念
    • 6.4.2 图的存储方式
    • 6.4.3 图的遍历
    • 6.4.4 拓扑排序
    • 6.4.5 图的最小生成树(Prim&kruskal)
  • 6.5 算法基础
    • 6.5.1 算法的特性
    • 6.5.2 算法的复杂度
  • 6.6 查找
    • 6.6.1 顺序查找
    • 6.6.2 二分查找法
    • 6.6.3 散列表法
  • 6.7 排序
    • 6.7.1 基本概念
    • 6.7.2 直接插入排序
    • 6.7.3 希尔排序
    • 6.7.4 直接选择排序

6.1 数组与矩阵

6.1.1 数组

求存储地址

  • 一维数组直接算
  • 二维数组看清是按行还是按列存储

在这里插入图片描述

6.1.2 稀疏矩阵

在这里插入图片描述

求对应一维数组下标公式,可以直接代两个元素进行验算

在这里插入图片描述

6.2 线性表

6.2.1 数据结构的定义

线性结构

  • 线性表

非线性结构

  • 图(可能存在环路)

在这里插入图片描述

6.2.2 顺序表与链表

6.2.2.1 定义

顺序表:采用一维数组的方式来存信息
链表:每个存储单元包含数据和指针

  • 单链表:只有一套指针,头结点指向第一个元素,并依次指下去。
  • 循环链表:与单链表的区别就是尾部有个指针直接指向头部。
  • 双向链表:可以双向移动,一套指针从头指到尾部,一套由尾指到头部。

6.2.2.2 链表的操作

  • 单链表删除结点:p->next = q->next
  • 单链表插入结点:s->next = p->next;p->next = s->next

引入头结点的好处可以让所有的结点操作方式一致

在这里插入图片描述

6.2.3 顺序存储和链式存储的对比

在这里插入图片描述

6.2.4 队列、循环队列、栈

队列:先进先出(又称先进先出表)
栈:先进后出

在这里插入图片描述

6.2.4.2 循环队列队空与队满条件

在这里插入图片描述

6.2.4.3 出入后不可能出现的序列练习

在这里插入图片描述

6.2.5 串

串是仅由字符构成的有限序列,是线性表的一种。

6.2.6 广义表

  • 广义表是线性表的推广
  • 广义表的元素即可以是单个元素(原子),也可以是广义表(子表)
  • 操作:
    *取表头head(LS)
    *取表尾tail(LS)

在这里插入图片描述

6.3 树与二叉树

6.3.1 基本概念

  • 根:树最顶层的结点。即下图的结点1。
  • 父结点(双亲结点):元素的上一层。下图中结点1为结点2、3的父结点。
  • 子结点:与父结点相反。
  • 兄弟结点:与该结点同层。下图结点4是结点5的兄弟结点。6为堂兄弟结点。
  • 结点的度:一个结点的子树的个数。下图结点2的度为2,结点7的度为0。
  • 树的度:该树中结点的度最高的结点的度的个数。MAX。下图树的度为2。
  • 叶子结点(终端结点):度为0的结点。下图结点4、5、7、8。
  • 内部结点(分支结点或非终端结点):除根结点和叶子结点外。下图结点2、3、6。
  • 结点的层次:根结点为第一层,依次往下。
  • 树的高度(深度):一棵树最大的层数。下图树的高度为4。

在这里插入图片描述

6.3.2 满二叉树与完全二叉树

  • 满二叉树:深度为k的二叉树节点个数为2k -1,即所有的结点都是满的。

可以对满二叉树进行连续编号,约定编号从根结点自上而下,自左至右依次进行。

  • 完全二叉树:除最底层外其余为满二叉树,最底层从左至右依次排列。

在这里插入图片描述

6.3.3 二叉树的重要性质

在这里插入图片描述

6.3.4 二叉树的遍历

三种遍历方式的区别就是根遍历的先后问题。

  • 先序遍历:根左右
  • 中序遍历:左根右
  • 后序遍历:左右根
  • 层次遍历:按顺序遍历

在这里插入图片描述

6.3.5 方向构造二叉树

给出二叉树的遍历序列,反向推出二叉树的结构
在这里插入图片描述

在这里插入图片描述

6.3.6 树转二叉树

  1. 将兄弟结点相连。
  2. 只保留第一个孩子结点与父结点的连线,其余全部断开,在旋转图可得

在这里插入图片描述

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

对于每个结点,其左孩子结点小于根,右孩子结点大于根,称为查找二叉树。

在这里插入图片描述

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

哈夫曼树是其叶子结点带权路径长度最短的二叉树

  • 带权路径长度:即路径长度乘权值,下图第一个二叉树的结点8的带权路径长度为8*3=24。
  • 树的带权路径长度为其总和。

在这里插入图片描述

6.3.9 线索二叉树

在所有的叶子结点上标出其前驱和后继。需先求出其序列,才能写出对应的线索二叉树。

在这里插入图片描述

6.3.10 平衡二叉树

每个结点的平衡度只能为1、0、-1
平衡度为该结点的左子树深度减右子树深度的值

在这里插入图片描述

6.4 图

6.4.1 图的概念

无向图:连接的线无方向。
有向图:连接的线有方向。

在这里插入图片描述

6.4.2 图的存储方式

  • 邻接矩阵:通路为1,无通路为0。

在这里插入图片描述

  • 邻接表:邻接表会记录每个结点相邻结点的信息。用数组记录结点,用链表记录可以到的结点的情况。

在这里插入图片描述

6.4.3 图的遍历

  • 深度优先:根据线索,一层一层深入到底,直到无法继续访问再退回进入下一个分支。
  • 广度优先:把一个结点的所有相邻的结点访问完,再进入下一个层次。

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

6.4.4 拓扑排序

拓扑排序:用一个序列表达一个图中,哪些事件可以先执行,哪些可以后执行

在这里插入图片描述

6.4.5 图的最小生成树(Prim&kruskal)

最小生成树:把图的一些边去除,只留下若干条边把所有结点连贯起来,留下的边的权值较小,使得留下来的这部分边的权值加起来最小。求最小生成树有普里姆算法和克鲁斯卡尔算法两种。

  • 普里姆算法(Prim):任选一个结点,将其标为红点集,其余的是蓝点集,然后找出从红点集到蓝点集最短的距离,找出后将其相连,相连的结点纳入红点集,再次寻找红点集到蓝点集最短的距离。选的边不能形成环路。

在这里插入图片描述

  • 克鲁斯卡尔算法(Kruskal):先确定要选的边的条数(结点数减一),再从整个图中最小的边选起,不能形成环路。

在这里插入图片描述

6.5 算法基础

6.5.1 算法的特性

在这里插入图片描述

6.5.2 算法的复杂度

时间复杂度:衡量算法执行下来需要耗费多少的时间,时间的量级。
常见的时间复杂度:
在这里插入图片描述

  • O(1):执行一条或多条类似于赋值的语句。
  • O(log2n):在排序二叉树中查询值,其中n为二叉树的层数。二分查找法。
  • O(n):执行一次类似for(i=0;i<n;i++)的语句。
  • O(n2):二层循环嵌套。
  • O(n3):三层循环嵌套。

在这里插入图片描述

  • 空间复杂度:衡量算法在执行过程中需要使用到的空间或交换空间的数量。

在这里插入图片描述

6.6 查找

6.6.1 顺序查找

  • 顺序查找:常见、简单但效率较低,时间复杂度为O(n)

在这里插入图片描述

6.6.2 二分查找法

  • 二分查找:首先必须是有序序列,查找二叉树就是有这种思想。

在这里插入图片描述
注意:比较过的值或区间不再出现在下次比较的区间内。
在这里插入图片描述
在这里插入图片描述

6.6.3 散列表法

类似按内容存储,将数据经过一定的规定运算(散列函数)在存储,若存储时数据冲突,可采用线性探测法和伪随机数法处理。

在这里插入图片描述

6.7 排序

6.7.1 基本概念

稳定与不稳定排序 内排序(内存中)与外排序。

  • 插入类排序:直接插入排序、希尔排序
  • 交换类排序:冒泡排序、快速排序
  • 选择类排序:简单选择排序、堆排序
  • 归并排序
  • 基数排序

在这里插入图片描述

6.7.2 直接插入排序

在这里插入图片描述

6.7.3 希尔排序

希尔排序步骤:

  • 先取一个增量d1,按照d1位元素间隔将该组元素分为若干个元素组,进行直接插入排序。
  • 再取一个增量d2<d1,重复上述操作。
  • 直到所取增量d=1。

在这里插入图片描述

6.7.4 直接选择排序

在未排序的元素组内依次选出最小的元素即可。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/149709.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Hive【Hive(六)窗口函数】

窗口函数&#xff08;window functions&#xff09; 概述 定义 窗口函数能够为每行数据划分 一个窗口&#xff0c;然后对窗口范围内的数据进行计算&#xff0c;最后将计算结果返回给该行数据。 语法 窗口函数的语法主要包括 窗口 和 函数 两个部分。其中窗口用于定义计算范围…

【计算机网络面试题(62道)】

文章目录 计算机网络面试题&#xff08;62道&#xff09;基础1.**说下计算机网络体系结构2.说一下每一层对应的网络协议有哪些&#xff1f;3.那么数据在各层之间是怎么传输的呢&#xff1f; 网络综合4.**从浏览器地址栏输入 url 到显示主页的过程&#xff1f;5.说说 DNS 的解析…

LabVIEW工业虚拟仪器的标准化实施

LabVIEW工业虚拟仪器的标准化实施 创建计算机化的测试和测量系统&#xff0c;从计算机桌面控制外部测量硬件设备&#xff0c;以及在计算机屏幕上显示的类似仪器的面板上查看来自外部设备的测试或测量数据&#xff0c;所有这些都需要虚拟仪器系统软件。该软件允许用户执行所有这…

VL53L5CX驱动开发(1)----驱动TOF进行区域检测

VL53L5CX驱动开发----1.驱动TOF进行区域检测 闪烁定义视频教学样品申请源码下载主要特点硬件准备技术规格系统框图应用示意图区域映射生成STM32CUBEMX选择MCU 串口配置IIC配置X-CUBE-TOF1串口重定向代码配置Tera Term配置演示结果 闪烁定义 VL53L5CX是一款先进的飞行感应&…

总结二:linux面经

文章目录 1、 Linux中查看进程运行状态的指令、查看内存使用情况的指令、tar解压文件的参数。2、文件权限怎么修改&#xff1f;3、说说常用的Linux命令&#xff1f;4、说说如何以root权限运行某个程序&#xff1f;5、 说说软链接和硬链接的区别&#xff1f;6、说说静态库和动态…

【目标检测】——PE-YOLO精读

yolo&#xff0c;暗光目标检测 论文&#xff1a;PE-YOLO 1. 简介 卷积神经网络&#xff08;CNNs&#xff09;在近年来如何推动了物体检测的发展。许多检测器已经被提出&#xff0c;而且在许多基准数据集上的性能正在不断提高。然而&#xff0c;大多数现有的检测器都是在正常条…

1700*C. Number of Ways(贪心前缀和)

Problem - 466C - Codeforces Number of Ways - 洛谷 解析&#xff1a; 首先判断所有数总和是否能被三整除。 之后遍历前缀和数组&#xff0c;如果某个位置的前缀和等于sum/3&#xff0c;则记录。 某个位置前缀和等于sum/3*2则记录答案。 注意由于分成三份&#xff0c;所以同…

Qt 设置软件的版本信息:QMake、CMake工程

本文借鉴了Qt 设置软件的版本信息 - 疯狂delphi - 博客园 (cnblogs.com) 在原文基础增加了CMake工程实现的方法。 Qt设置软件的版本等信息 对于Qt开发的软件&#xff0c;我们如何去方便的查看其软件的版本信息。这里提供了几种方式。 在运行程序期间设置版本信息 大部分的程序…

黑马点评-01基于Redis实现短信登陆的功能

环境准备 当前模型 nginx服务器的作用 手机或者app端向nginx服务器发起请求,nginx基于七层模型走的是HTTP协议,可以实现基于Lua直接绕开tomcat访问Redis nginx也可以作为静态资源服务器,轻松扛下上万并发并负载均衡到下游的tomcat服务器,利用集群支撑起整个项目 使用nginx部…

二分查找:34. 在排序数组中查找元素的第一个和最后一个位置

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《算法》 文章目录 前言一、题目解析二、解题思路1. 暴力查找2. 一次二分查找 部分遍历3. 两次二分查找分别查找左右端点1.查找区间左端点2. 查找区间右端点 三、代码实现总结 前言 本篇文…

力扣 -- 873. 最长的斐波那契子序列的长度

解题步骤&#xff1a; 参考代码&#xff1a; class Solution { public:int lenLongestFibSubseq(vector<int>& nums) {int nnums.size();unordered_map<int,int> hash;for(int i0;i<n;i){hash[nums[i]]i;}int ret2;vector<vector<int>> dp(n,v…

基于SSM的旅游网站设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

国庆看坚如磐石

坚如磐石上映了&#xff0c;可以在爱奇艺观看。 而博主在使用蓝牙耳机连接电脑的过程中&#xff0c;发现没有蓝牙开启选项&#xff0c;并且在服务的设备管理器中也没有找到&#xff0c;很明显这是缺少驱动导致的&#xff0c;因此便去联想官方网站下载对应的驱动。 这里可以输入…

外包做了3个月,技术退步明显。。。。。

先说一下自己的情况&#xff0c;大专生&#xff0c;17年通过校招进入广州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

python开发幸运水果抽奖大转盘

概述 当我女朋友跟我说要吃水果&#xff0c;又不知道吃啥水果时候&#xff0c;她以为难为到我了&#xff0c;有啥事难为到程序员的呢&#xff01; 今天用python利用第三方tkinterthreadingtime库开发一个幸运水果抽奖大转盘&#xff01;抽到啥吃啥 详细 老规矩&#xff01;咱…

初级数值计算理论总结

本文用于总结复习与研究生面试 一问&#xff0c;小伙子会不会数值计算啊一答&#xff1a;会二问&#xff1a;哦&#xff0c;讲讲看二答&#xff1a;讲不出来三问&#xff1a;...... 数值求根 二分法Jacobi 迭代法 Jacobi 迭代改进算法&#xff08;事后加速法&#xff09;&#…

频次直方图、KDE和密度图

Seaborn的主要思想是用高级命令为统计数据探索和统计模型拟合创建各种图形&#xff0c;下面将介绍一些Seaborn中的数据集和图形类型。 虽然所有这些图形都可以用Matplotlib命令实现&#xff08;其实Matplotlib就是Seaborn的底层&#xff09;&#xff0c;但是用 Seaborn API会更…

用JMeter对HTTP接口进行压测(一)压测脚本的书写、调试思路

文章目录 安装JMeter和Groovy为什么选择Groovy&#xff1f; 压测需求以及思路准备JMeter脚本以及脚本正确性验证使用Test Script Recorder来获取整条业务线上涉及的接口为什么使用Test Script Recorder&#xff1f; 配置Test Script Recorder对接口进行动态化处理处理全局变量以…

几种开源协议的区别(Apache、MIT、BSD、MPL、GPL、LGPL)

作为一名软件开发人员&#xff0c;你一定也是经常接触到开源软件&#xff0c;但你真的就了解这些开源软件使用的开源许可协议吗&#xff1f; 你不会真的认为&#xff0c;开源就是完全免费吧&#xff1f;那么让我们通过本文来寻找答案。 一、开源许可协议简述 开源许可协议是指开…

Iphone文件传到电脑用什么软件,看这里

在数字化时代&#xff0c;文件传输已经成为我们日常生活中不可或缺的一部分。然而&#xff0c;苹果用户在将手机文件传输到电脑时&#xff0c;往往会面临一些困扰。曾经的“文件传输助手”并不能完全满足用户的需求。于是&#xff0c;很多人开始寻找更便捷的解决方案。在本文中…