数据结构-----软件设计师
详情可以看我的笔记观感更好一点
笔记链接https://note.youdao.com/s/LQLP3cAw
线性表❤❤❤❤❤
线性表的定义
线性表的存储结构
顺序存储
对有序表n个元素进行顺序查找 其成功查找的平均查找长度是(在查找表中找到指定的关键码元素时,所进行比较的表中元素的个数):
假设从前往后找 找第n个,找到第一个 一次比较 第3个 三次比较
链式存储
单链表
在链表中添加头结点以后 查找表中的某一元素仍然要从头指针出发,顺序找到目标元素或者失败时找到表尾为止,时间复杂度与表长成正比
与顺序表相比,采用链表存储的缺点是 数据之间的关系需要占用存储空间,导致存储密度不高
循环链表
单项循环链表:
插入操作: 只需要知道插入的位置即可 即 我再t位置插入 只需要知道t的位置
要删除尾指针节点 :需要找到删除节点的前一个节点 ,但是注意此时这里单循环链表 ,我如果需要找到前面一个需要通过遍历 一个个往后遍历所以时间复杂度是O(n)
双向链表
顺序存储和链式存储对比
线性表的插入删除运算
队列和栈
栈
栈的存储结构
队列
队列的存储结构
循环队列
rear表示队尾元素指针len表示队列长度, 队列存储空间是M,则队头元素的指针是:如果指针-长度小于0,加上M后得到最终的坐标,如果大于0,说明这个值已经是坐标 使用%M将+M去掉
串:
除了串替换以外 其他运算都不会改变串种的内容 因此 在链表存储方式下 进行串替换最不方便
串的存储结构
串的模式匹配
数组与矩阵形参❤❤
数组
矩阵
常考稀疏矩阵在一维数组中存储 矩阵中对应的元素在一维数组中表示的位置
广义表❤❤
哈希表
如果装填因子a定义为表中装入的记录数和表中的长度值比:那么a越大发生冲突的可能性就越大, 因为a表示哈希表被装满的程度 ,你装满了有新的进来就100%冲突
树与二叉树❤❤❤❤❤
树的定义与基本运算
二叉树
二叉树的存储结构
具有三个节点的二叉树有五种,可推测具有四个节点的二叉树有几种?
二叉树的遍历
一颗满二叉树使用log2m取整=log2n取整来判断mn两个节点是否在同一层
二叉排序树
查找二叉树
哈夫曼树
单支树
线索二叉树
平衡二叉树
最优二叉树
完全二叉树
除了最后一层以外 每一层上的节点都达到在最大值 在最后一层上只缺少右边的若干节点
树与森林
树的存储结构
树和森林的遍历
树 森林 二叉树的转换
图 ❤❤
图的定义
完全图
顶点数决定了邻接矩阵的阶和邻接表中的单链表数目 无论是对无向图还是有向图 变数的多少决定了单链表的中的节点数 不影响邻接矩阵的规模,因此完全图使用邻接矩阵存储
无向图的邻接矩阵是一个对称矩阵,每条边都会表示两次因此矩阵种的非0数目wei2E(E为表示边的个数)
当二维数组表示邻接矩阵图的存储结构时候 查找每个顶点的邻接点需要时间On2 其中n为途中顶点数
而当邻接表作图的存储结构时候e为无向图中变得数或有向图种弧的数,深度优先搜索遍历图的时间复杂度是O(n+e)
图的存储结构
邻接表
图的遍历
拓朴排序和关键路径
图的生成树和最小生成树
最短路径
排序与查找❤❤❤❤❤
静态查找表
顺序查找
折半查找
分块查找
动态查找表
二叉排序树
平衡二叉树
它或者一棵空树 或者具备以下性质的树:它的左子树和右子树的深度之差的绝对值不超过1,且它的左子树和右子树都是一颗平衡树
B-树
定义
- 每一个节点最多有 m 个子节点
- 每一个非叶子节点(除根节点)最少有 ⌈m/2⌉ 个子节点,⌈m/2⌉表示向上取整。
- 如果根节点不是叶子节点,那么它至少有两个子节点
- 有 k 个子节点的非叶子节点拥有 k − 1 个键
- 所有的叶子节点都在同一层
哈希表及其查找
需要减少冲突就要设法使哈希函数尽可能均匀地把关键字映射道存储区的各个存储地址上没注意可以提高查找效率
排序
直接插入排序
希尔排序
快速排序
堆排序
归并排序
基排序
内部排序的比较和选择
外部排序
时间复杂度和空间复杂度❤❤❤❤❤
对n个基本有序的整数进行排序 若采用插入排序法 则时间和空间复杂度为0(n)和0(1)
算法基础和常见算法❤❤❤❤❤
N 皇后问题 8×8棋盘不可以在同行同列 相同对角线上放两个皇后
由于不求最优解 不适用于最优子结构 不适用动态规划法和贪心法求解
又称试探法 按选优条件向前搜索但是探索到某一部的时候发现原先选择不达标不优秀 就退回重新选择 路走不通就退回的就是 回溯法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义