数据结构与算法 知识点总结,超全!!!
总结了一下数据结构算法的非常基础的知识,帮助到你的话请关注我呀,持续更新中……
第二章 数据结构与算法
- 2.1 算法
- 2.1.1算法的基本概念
- 2.1.2算法设计的基本方法
- 2.1.3算法复杂度
- 2.1.3.1 时间复杂度
- 2.1.3.2 空间复杂度
- 2.2 数据结构的基本概念
- 2.2.1是什么
- 2.2.1.1数据的逻辑结构
- 2.2.1.2数据的存储结构
- 2.2.2 数据结构的图形表示
- 2.2.3 线性结构与非线性结构
- 2.3 线性表及其顺序存储结构
- 2.3.1 线性表的基本概念
- 2.3.2 线性表的顺序存储结构
- 2.3.3顺序表的插入运算
- 2.3.4 顺序表的删除运算
- 2.4 栈和队列
- 2.4.1 栈及其基本运算
- 2.4.1.1 什么是栈
- 2.4.1.2 栈的顺序存储及其运算
- 2.4.2 队列及其基本运算
- 2.5 线性链表
- 2.5.1 线性链表的基本概念
- (1)线性表的线性存储结构缺点
- (2)线性表的链式存储结构
- 1. 线性链表
- 2. 带链的栈
- 3. 带链的队列
- 2.5.2 线性链表的基本运算
- 2.5.3 循环链表
- 2.6 树与二叉树
- 2.6.1 树的基本概念
- 2.6.2 二叉树及其基本性质
- 1.什么是二叉树
- 2.二叉树的基本性质
- 3.满二叉树与完全二叉树
- 2.6.3 二叉树的存储结构
- 2.6.4 二叉树的遍历
- 遍历方法:
- 2.7 查找技术
- 2.7.1 顺序查找
- 2.7.2 二分法查找
- 2.8 排序技术
- 2.8.1 交换类排序法
- 1.冒泡排序法
- 2.快速排序法
- 2.8.2 插入类排序法
- 1. 简单插入排序法
- 2.希尔排序法
- 2.8.3 选择类排序法
- 1.简单选择排序法
- 2.堆排序法
2.1 算法
2.1.1算法的基本概念
定义:算法是指对解题方案的准确而完整的描述
特征:
(1)可行性
- 算法的每一个步骤必须能够实现
- 算法的执行要能够达到预期的目的
(2)确定性
- 步骤有明确定义
(3)有穷性
- 有限步骤
(4)用有足够的情报
2.1.2算法设计的基本方法
(1)列举法
(2)归纳法
通过列举少量特殊情况,经过分析,找出一般的关系
(3)递推法
从已知的条件出发逐次推出所要求的各中间结果和最后结果
(4)递归法
将问题逐层分解成简单问题,解决简单问题后沿着分解逆过程逐步综合
- 递归调用
自己调用自己 - 递归分类
直接递归、间接递归
(5)减半递推技术
(类似于闭区间套的构造,二分区间)
(6)回溯法
通过尝试可行的解法,若进行到不可解,回退换别的路线
2.1.3算法复杂度
2.1.3.1 时间复杂度
与 基本运行的次数、问题规模 有关
分析算法工作量
(1)平均性态
各种特定输入下的基本运算的加权平均
(2)最坏情况复杂性
在规模为n时,算法所执行的基本运算的最大次数
2.1.3.2 空间复杂度
指执行这个算法所需要的内存空间
(具体包括:算法程序、输入初始数据、算法执行过程中 所需要占用的空间)
2.2 数据结构的基本概念
2.2.1是什么
定义:指互相有关联的数据元素的集合
例:矩阵、向量
2.2.1.1数据的逻辑结构
(1)表示数据的逻辑信息
(2)表示数据的前后件关系
2.2.1.2数据的存储结构
数据的逻辑结构在计算机中的表示
2.2.2 数据结构的图形表示
- 根结点 : 没有前件的结点
- 终端结点 : 没有后件的结点
- 内部节点 : 不是以上两种的结点
2.2.3 线性结构与非线性结构
- 空数据结构
没有数据元素 - 非空数据结构
1.线性结构
(1)有且只有一个根结点
(2)每一个结点自己多只有一个前件,也最多只有一个后件
2.非线性数据结构
2.3 线性表及其顺序存储结构
2.3.1 线性表的基本概念
由一组数据组成
矩阵也是一个线性表
(一行或一列向量)简单线性表
由若干数据项组成的数据元素–>记录
多个记录构成的线性表 -->文件
线性表中结点的个数n–> 线性表的长度n
2.3.2 线性表的顺序存储结构
线性表的顺序存储特点
(1)线性表的所有存储空间是连续的
(2)线性表中各数据是按逻辑顺序依次存放的
通常定义一个一维数组存放线性表
(一维数组通常定义的比线性表实际长度大一些,以便于对线性表进行运算)
主要的运算:
- 插入
- 删除
- 查找
- 排序
- 分解
- 合并
- 复制
- 逆转
2.3.3顺序表的插入运算
表中插入a,a后元素整体后移,列表长度增加
(插入多于储存空间–>上溢)
2.3.4 顺序表的删除运算
删除表中元素b,b后元素整体上移,列表长度减小
(线性表为空时删除–>下溢)
(b位置<1或>n时,认为不能删除,算法结束)
2.4 栈和队列
2.4.1 栈及其基本运算
2.4.1.1 什么是栈
一种特殊的线性表
基本原则
- 开始执行程序前,建立一个线性表,其初始状态为空
- 当发生调用时,将当前调用的返回点地址插入到线性表的末尾
- 当遇到某个子程序返回时,其返回点地址从线性表的末尾取出(即删除线性表后的一个元素)
定义
栈是限定在一端进行插入和删除的线性表
栈顶
允许插入和删除的一端
栈底
不允许插入和删除的另一端
指针top
指示栈顶的位置
指针bottom
指示栈底的位置
入栈运算
在栈中插入一个元素
退栈运算
从栈中删除一个元素
2.4.1.2 栈的顺序存储及其运算
一维数组S(1:m)为栈的顺序存储空间,(其中m为栈的最大容量)
栈底元素:S(bottom)
栈顶元素:S(top)
top=0 栈空 top=m 栈满
基本运算
(1)入栈运算
判断top是否指向最后一个元素—不为m–top+1—新元素插入top指向位置 》》》否则上溢
(2)退栈运算
判断top是否=0 —不为0—栈顶元素赋给指定变量—top-1
》》》否则下溢
(3)读栈顶运算
判断top是否=0 —不为0—栈顶元素赋给指定变量
》》》否则读不到栈顶元素
2.4.2 队列及其基本运算
(1)什么是队列
定义 :允许在一端插入、另一端删除的线性表
原则 : 初始为空、队尾等待、队头执行
“先来先服务”
尾指针rear : 指向队尾允许被插入的一端
头指针front :指向排头允许被删除的一端
入队运算:队尾插入
退队运算: 队头删除
(2)循环队列及其运算
在实际应用中,队列的顺序存储结构一般采用循环队列的形式
初始状态为空:rear=front=m
入队运算:判断循环队列是否为满—rear+1—( rear=m+1时,置rear=1
退队运算:判断循环队列是否为空—front+1—(front=m+1时,置front= 1
队列空 :s=0
队列满 :s=1 且 front=rear=m
2.5 线性链表
2.5.1 线性链表的基本概念
(1)线性表的线性存储结构缺点
1.插入语删除的运算效率都很低
2.线性表的存储空间不便于扩充
3.存储空间不便于对存储空间的动态分配
(2)线性表的链式存储结构
存储结点(简称:结点) :数据结构中的每一个数据结点对应于一个存储单元,这种存储单元叫作~
结点组成:
数据域:用于存放数据元素值
指针域:用于存放指针(指针用于指向该结点的前一个或后一个结点,即前件或后件)
tips:
1.在链式存储结构中,存储数据结构的存储空间可以不连续,各数据结点的存储顺序与数据元素的顺序可以不一致,而数据之间的逻辑关系有指针域来确定。
2.链式存储方式既可以用于表示线性结构,也可以用于表示非线性结构。
3.在用链式结构表示较复杂的非线性结构时,其指针域的个数要多一些。
1. 线性链表
头指针HEAD : 指向线性表中第一个结点的指针HEAD
HEAD=NULL或0时,称为空表
单线性链表 : 每个结点只有一个指针域(右指针)
双向链表 : 每个结点有两个指针
左指针 : 指向前件
右指针 : 指向后件
2. 带链的栈
应用: 用来收集计算机存储空间中所有空闲的存储结点,这种带链的栈称为可利用栈。
运算:栈的初始化、入栈、退栈、读栈顶元素
3. 带链的队列
运算:队的初始化、入队、退队
2.5.2 线性链表的基本运算
- 插入
从可利用栈取得一个结点,链接插入前后的结点,实现内存动态分配、不会上溢 - 删除
将数据删除,结点放回可利用栈,不需要移动表的数据元素,只需要改变被删除元素所在结点的前一个结点的指针域即可。 - 合并
- 分解
- 逆转
- 复制
- 排序
- 查找
2.5.3 循环链表
为了克服空表和对第一个节点需要单独考虑的问题(空表和非空表不统一)
循环链表的特点:
(1)增加表头结点,其数据域为任意或者根据需要来设置,指针域指向线性表的第一个元素的结点。头指针指向表头结点。
(2)最后一个结点的数据域不是空,而是指向表头结点
循环链表的优点:
(1)只要指出表中任何一个结点的位置,就可以从它出发访问到表中其他所有的结点。
(2)由于表头结点的存在,在任何情况下,循环链表至少有一个结点存在,从而使空表与非空表的运算统一。
2.6 树与二叉树
2.6.1 树的基本概念
树是一种简单非线性结构(层次结构)
父结点:每一个结点只有一个前件,这个前件是它的~
根结点: 没有前件的结点
子结点: 每一个结点有多个后件,这个后件是它的~
叶子结点:没有后件的结点
度: 一个结点拥有的后件个数,称为该结点的~
深度:树的最大层次数
2.6.2 二叉树及其基本性质
1.什么是二叉树
(1)非空二叉树只有一个根结点
(2)每一个结点最多有两棵子树,分别称为该数的左子树与右子树。
2.二叉树的基本性质
(1)在二叉树的第k层上,最多有 2 k − 1 ( k > = 1 ) 2^{k-1} (k>=1) 2k−1(k>=1)个结点
(2)深度为m的二叉树最多有 2 m − 1 2^m-1 2m−1 个结点
(3)在任意一颗二叉树中,度为0的结点(即叶子结点)总是比度为2的结点多1个
记 n 0 , n 1 , n 2 n_0,n_1,n_2 n0,n1,n2 分别为叶子结点、度为1的结点、度为2的结点个数, m 为分支个数, 则满足以下关系:
n = n 0 + n 1 + n 2 n=n_0+n_1+n_2 n=n0+n1+n2 ,
n = m + 1 n=m+1 n=m+1,
n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
(4)具有n个结点的二叉树,其深度至少为 [ l o g 2 n ] + 1 [log_2 n]+1 [log2n]+1,其中 [ l o g 2 n ] [log_2n] [log2n] 表示取 l o g 2 n log_2n log2n的整数部分
3.满二叉树与完全二叉树
1)满二叉树
每一层都是满的
2)完全二叉树
只有最后一层只缺少右边的若干结点,其他均满
除上述4条性质外,还有性质:
(5)具有n个结点的完全二叉树的深度为 [ l o g 2 n ] + 1 [log_2 n]+1 [log2n]+1
(6)设完全二叉树共有n个结点,从根结点开始标号k=1,2,3……,则有以下结论:
k=1,根结点
2k<=n, 左结点
2k+1<=n,右结点
2.6.3 二叉树的存储结构
在计算机中,二叉树通常采用链式结构储存
两个后件
2.6.4 二叉树的遍历
二叉树的遍历指不重复的访问二叉树中所有结点。
遍历方法:
1.前序遍历
优先级:根-左-右 FCADBEGHP
2.中序遍历
优先级:左-根-右 ACDBFEHGP
3.后序遍历
优先级: 左-右-根 ADBCHPGEF
2.7 查找技术
2.7.1 顺序查找
线性表中查找指定的元素,最坏比较n次
只能用顺序查找的情况:
(1)线性表为无序表
(2)有序线性表采用链式存储结构
2.7.2 二分法查找
只适用于顺序存储的有序表
查找顺序:根-左-右
对于长度为n的有序线性表,在最坏情况下,只需要比较 l o g 2 n log_2n log2n次
2.8 排序技术
定义:排序指将一个无序序列整理成按值非递减顺序排列的有序序列
2.8.1 交换类排序法
1.冒泡排序法
相邻元素比较,元素值小的往前交换,
最坏比较 n(n-1)/2 次
2.快速排序法
分割子表,比元素小的移到前面,大的移到后面
最坏比较 n(n-1)/2 次
2.8.2 插入类排序法
1. 简单插入排序法
将无序序列中个元素依次插入到已经有序的线性表中
最坏比较 n(n-1)/2 次
2.希尔排序法
将整个无序序列分割成若干小的子序列分别进行插入排序
最坏比较 O( n 1.5 n^{1.5} n1.5) 次
2.8.3 选择类排序法
1.简单选择排序法
扫描所有的元素,选出最小的元素将它交换到表的最前面
最大比较次数 n(n-1)/2 次
2.堆排序法
堆的定义:
定义1: { h i > = h 2 i h i > = h 2 i + 1 \begin{cases}h_i>=h_{2i}\\h_i>=h_{2i+1} \end{cases} {hi>=h2ihi>=h2i+1
定义2: { h i < = h 2 i h i < = h 2 i + 1 \begin{cases}h_i<=h_{2i}\\h_i<=h_{2i+1} \end{cases} {hi<=h2ihi<=h2i+1
即,父结点值>=子结点值
最大比较次数 O ( n l o g 2 n ) O(n log_2n) O(nlog2n) 次
原创总结,转载请注明出处qaq
更多章节更新中……
数据结构与算法 知识点总结,超全!!!相关推荐
- 降维算法总结(超全!附代码)
降维算法总结(超全!附代码) 一.为什么要进行数据降维? 二.数据降维原理 三.主成分分析(PCA)降维算 PCA代码实现 四.其他降维算法及代码地址 效果总览及代码地址 KPCA(kernel PC ...
- python数据结构与算法知识点_数据结构和算法基础知识点(示例代码)
数据结构和算法基础知识点 链表 1.链表是一种由节点组成的线性数据集合,每个节点通过指针指向下一个节点.它是 一种由节点组成,并能用于表示序列的数据结构. 2.单链表:每个节点仅指向下一个节点,最后一 ...
- 学习笔记 | 数据结构和算法 知识点思维导图
程序 = 数据结构 + 算法 一 数据结构知识点 01 队列和栈,需要了解它们的特点. 队列是先进先出,栈是后进先出. 02 表 表,包括很多种,有占用连续空间的数组.用指针链接的单向和双向链表,首尾 ...
- 数据结构与算法——知识点总结
本文包含数据结构与算法主要的基本知识点,便于知识的梳理与回顾. 部分知识点的详细介绍请在专栏内查阅. 目录 一.概述 二.线性表 三.栈 四.队列 五.串 六.多维数组和广义表 七.树和二叉树 八.图 ...
- 【图解数据结构与算法】数据结构与算法知识点整理 Data Structures and Algorithms
程序=数据结构+算法 数据结构是可以存储和组织数据的命名位置. 算法是用于解决特定问题的一组步骤. 数据结构是指:一种数据组织.管理和存储的格式,它可以帮助我们实现对数据高效的访问和修改. 数据结构 ...
- 2023届校招算法岗知识超全总结
又是一年「金三银四」,在此为今年校招的同学准备了一份笔面试经验大礼包. 去年我发过一篇 论机械狗如何硬卷算法岗,主要是机械转互联网的经验分享. 本文主要面向搜推广nlp岗位的同学. 总体而言,个人认为 ...
- 万字长文详解目标检测算法,超大超全(2022最新)
摘要 1 概述 2 目标检测回顾 2.1 two-stage 2.2 one-stage 3 目标检测配方 3.1 基础概念 3.1.1 损失函数 3.1.2 Anchor-based 和 Keypo ...
- 【王道考研】王道数据结构与算法详细笔记(全)
目录 第一章 数据结构绪论 1.1 数据结构的基本概念 1.2 数据结构的三要素 1.2.1. 数据的逻辑结构 1.2.2. 数据的存储结构(物理结构) 1.2.3. 数据的运算 1.2.4. 数据类 ...
- 数据结构思维导图,超全!超详细!
文章目录 数据结构思维导图 一.数据结构基本概念 二.线性表 三.栈和队列 四.树 五.图 六.查找 七.排序 八.二叉树与树与森林 数据结构思维导图 我在一个平台(忘记了)上发现了一个博主制作的数据 ...
最新文章
- RISC-V 正在成为芯片世界中的 Linux
- HDOJ 1098 Ignatius's puzzle
- 免费的python课程-自学Python的10门免费课程,已学完
- Python5:Script
- draw graph
- 阿里云新推出 HiTSDB + IoT套件 物联网设备上云步入快车道
- 怎么添加本地音乐_原来手机点击这个按钮,就能一键生成音乐电子相册!这也太厉害了...
- 在真实数据集上的随机森林模型参数调优
- 小程序丨canvas内容自适应不同尺寸屏幕
- python 爬取直播_Python爬取直播视频
- 三组计算机局域网组网方案,怎么建立一个可以互相联机的局域网
- 任正非的小女儿,出道了!以后会代言华为手机吗?
- Apache RocketMQ 在阿里云大规模商业化实践之路
- linux 查询dhcp服务,查找局域网中的DHCP服务器
- Mac 设置 Git 代理
- 企业如何正确选择gpu服务器,GPU服务器参数——GPU服务器应该如何选择
- 学习ARM开发(11)
- 《Java语言高级特性(阿里云大学)》笔记 第7~14章 类库+正则+国际化+比较器(文档+思维导图)
- (7)点云数据处理学习——单摄像头深度估计
- OpenSSL 拒绝服务、证书绕过漏洞通告
热门文章
- ucl计算机教授汪军,UCL汪军教授开课:带你入坑多智能体机器学习(免费)!
- 微信小程序保存图片到相册授权被拒绝后重新拉取授权
- 小学计算机课在教室怎么上,小学计算机教室管理制度
- 众辰变频器nz200t参数_上海众辰变频器系列简介
- html局部翻页效果,基于Turn.js 实现翻书效果实例解析
- Eclipse中进行web project开发时遇到httperror 500 错误 jsp support not configured 问题的解决方法
- 辐射光电流测试软件,电磁骚扰辐射发射的测试方法
- IBM虚拟化与云计算研究员吴玉会——虚拟化三大优势详解:共享、优化、管理...
- 外军的现役机载预警雷达(AEW)参数一览表
- Word 2003 长篇文档排版技巧