IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 数据结构与算法 知识点总结,超全!!! -> 正文阅读

[数据结构与算法]数据结构与算法 知识点总结,超全!!!

总结了一下数据结构算法的非常基础的知识,帮助到你的话请关注我呀,持续更新中……

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)增加表头结点,其数据域为任意或者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个
(4)具有结点的二叉树,其深度至少 [ l o g 2 n ] + 1 [log_2 n]+1 [log2?n]+1,其中 [ l o g 2 n ] [log_2n] [log2?n] 表示取 l o g 2 n log_2n log2?n的整数部分

3.满二叉树与完全二叉树

1)满二叉树
每一层都是满的
2)完全二叉树
只有最后一层只缺少右边的若干结点,其他均满
除上述4条性质外,还有性质:
(5)具有n个结点的完全二叉树的深度为 [ l o g 2 n ] + 1 [log_2 n]+1 [log2?n]+1

2.6.3 二叉树的存储结构

在计算机中,二叉树通常采用链式结构储存
两个后件

2.6.4 二叉树的遍历

二叉树的遍历指不重复的访问二叉树中所有结点。

遍历方法:

二叉树

1.前序遍历
优先级:根-左-右 FCADBEGHP
2.中序遍历
优先级:左-根-右 ACDBFEHGP
3.后序遍历
优先级: 左-右-根 ADBCHPGEF

2.7 查找技术

2.7.1 顺序查找

只能用顺序查找的情况:
(1)线性表为无序表
(2)有序线性表采用链式存储结构

2.7.2 二分法查找

只适用于顺序存储的有序表
查找顺序:根-左-右

对于长度为n的有序线性表,在最坏情况下,只需要比较 l o g 2 n log_2n log2?n

2.8 排序技术

定义:排序指将一个无序序列整理成按值非递减顺序排列的有序序列

2.8.1 交换类排序法

1.冒泡排序法

相邻元素比较,元素值小的往前交换

2.快速排序法

分割子表,比元素小的移到前面,大的移到后面

2.8.2 插入类排序法

1. 简单插入排序法

将无序序列中个元素依次插入到已经有序的线性表中

2.希尔排序法

将整个无序序列分割成若干小的子序列分别进行插入排序

2.8.3 选择类排序法

1.简单选择排序法

扫描所有的元素,选出最小的元素将它交换到表的最前面

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?>=h2i?hi?>=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?<=h2i?hi?<=h2i+1??

即,父结点值>=子结点值

原创总结,转载请注明出处qaq
更多章节更新中……

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:27:04  更:2021-09-18 10:30:03 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 2:53:10-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码