![](https://img-blog.csdnimg.cn/f5c6eb052af84791a8c99bc0c7d61dd5.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构与算法
文章平均质量分 91
数据结构与算法学习笔记
hello world 999
日拱一卒无有尽,功不唐捐终到海,十年磨一剑,再见顶峰相见。
展开
-
【数据结构与算法】01:绪论
绪论OVERVIEW绪论一、DS研究内容1.线性关系2.树形结构3.网状关系图4.总结二、基本概念和术语1.Data数据2.DataElement数据元素3.DataItem数据项4.DataObject数据对象5.DataStructure数据结构(1)数据结构内容:(2)逻辑结构的种类:(3)存储结构的种类:6.DT&ADT(1)DT数据类型:(2)ADT抽象数据类型:三、算法与算法分析1.算法概述2.算法特性3.algorithm设计要求4.algorithm时间复杂度(1)比较算法的执行原创 2022-04-16 12:53:49 · 771 阅读 · 1 评论 -
【数据结构与算法】02:线性表
第一章:线性表一、线性表1.线性表定义注意:同一线性表中的元素必定具有相同的特性,数据元素之间的关系是线性关系。2.线性表逻辑特征:3.线性表类型定义二、线性表的顺序表示与实现1.顺序表定义:注意:线性表顺序存储结构必须占用一片连续的存储空间,知道某个元素的存储位置就可以计算其他元素的存储位置。2.顺序表存储表示:c动态内存分配:cpp动态存储分配:3.顺序表操作实现:(1)基本操作:基本操作函数初始化InitList原创 2022-04-16 13:18:15 · 1498 阅读 · 0 评论 -
【数据结构与算法】03:栈与队列
第三章:栈与队列OVERVIEW第三章:栈与队列一、栈和队列的定义1.栈Stack2.队列Queue3.栈和队列应用案例:(1)进制转换:(2)括号匹配检测:(3)表达式求值:(4)舞伴问题:二、栈的表示与实现1.StackADT:2.顺序栈SqStack(1)顺序栈表示:(2)顺序栈基本操作:(3)顺序栈重要操作:<1>顺序栈初始化:<2>顺序栈入栈:<3>顺序栈出栈:3.链栈LinkStack(1)链栈表示:(2)链栈基本操作:<1>链栈初始化:<原创 2022-04-20 23:12:22 · 397 阅读 · 0 评论 -
【数据结构与算法】04:串、数组与广义表
第四章:串、数组与广义表OVERVIEW第四章:串、数组与广义表一、String串1.String定义:2.StringADT:3.String存储结构:(1)顺序串:(2)链串:4.String模式匹配算法:(1)BF算法:(2)KMP算法:5.String串应用:二、数组1.数组定义:2.数组ADT:3.数组存储结构:(1)一维数组:(2)二维数组:(3)三维数组:(4)n维数组:4.特殊矩阵的压缩存储(1)对称矩阵:(2)三角矩阵:(3)对角矩阵(带状矩阵):(4)稀疏矩阵存储★:三、lists广原创 2022-04-23 16:07:01 · 519 阅读 · 1 评论 -
【数据结构与算法】05:二叉树
第五章:二叉树(上)OVERVIEW第五章:二叉树(上)一、二叉树定义1.树的定义2.树的基本概念3.二叉树定义4.二叉树形态5.树与二叉树对比二、二叉树ADT三、二叉树性质1.二叉树性质2.满二叉树性质3.完全二叉树性质:四、二叉树存储结构1.顺序二叉树2.链式二叉树(1)二叉链表:(2)三叉链表:五、二叉树遍历1.先根遍历2.中根遍历3.后根遍历4.遍历序列确定二叉树5.非递归遍历(栈)6.层次遍历算法(队列)六、二叉树遍历算法应用1.二叉树的建立2.二叉树的复制3.二叉树深度计算4.二叉树结点个数原创 2022-05-18 12:07:42 · 302 阅读 · 1 评论 -
【数据结构与算法】06:二叉树应用
第五章:二叉树(下)OVERVIEW第五章:二叉树(下)一、树与森林1.树存储结构(1)双亲表示法:(2)孩子链表:(3)二叉链表表示法:2.树的基本操作(1)树转换为二叉树:(2)二叉树转换为树:3.森林的基本操作(1)森林转为二叉树:(2)二叉树转为森林:4.树与森林的遍历(1)树的遍历:(2)森林的遍历:二、哈夫曼树1.基本概念2.哈夫曼树构造3.哈夫曼树构造算法(1)数组初始化:(2)结点的n-1次合并:4.哈夫曼树应用—哈夫曼编码(1)问题引入:(2)哈夫曼编码:5.哈夫曼编码应用—文件的编码原创 2022-05-26 21:17:02 · 1144 阅读 · 0 评论 -
【数据结构与算法】07:图论算法
与图G相关的概念:与顶点V相关的概念:与边E相关的概念:图没有顺序存储结构,但是可以借助二维数组来表示元素之间的关系。建立一个顶点表(记录各个顶点的信息)和一个邻接矩阵(表示各个顶点之间边的关系)设图有n个顶点:图的邻接矩阵是一个二维数组定义为:有向图邻接矩阵表示:有向网邻接矩阵表示:的邻接矩阵是一个二维数组定义为:邻接矩阵的存储表示:用两个数组分别存储顶点表和邻接矩阵,演示案例:采用邻接矩阵表示法创建无向网邻接矩阵的优点:邻接矩阵的缺点:建立一个顶点表(记录各个顶点的信息)和一个线性链表(记录关联着同一顶原创 2022-06-13 18:22:15 · 618 阅读 · 0 评论 -
【数据结构与算法】09:查找算法
主关键字:可唯一标识记录的关键字次关键字:用以识别若干记录的关键字关键字的平均比较次数,平均查找长度ASL(Average Search Length)ASLi1∑npici。原创 2022-05-30 20:23:51 · 485 阅读 · 0 评论 -
【数据结构与算法】10:排序算法
时间复杂度排序方法O(nlogn)快速排序、堆排序、归并排序(其中快速排序最好)O(n2直接插入排序、冒泡排序、简单选择排序(其中直接插入排序最好)O(n)基数排序当待排序序列关键字顺序有序时,直接插入排序和冒泡排序能达到O(n)的时间复杂度,而对于快速排序将退化为O(n2简单选择排序、堆排序和归并排序的时间性能不随记录序列中的关键字的分布而变化。所有的简单排序方法(包括直接插入、冒泡和简单选择)的堆排序的空间复杂度为O(1)快速排序栈需要使用辅助空间,空间复杂度为O(logn)原创 2022-06-08 10:44:03 · 755 阅读 · 5 评论 -
【杂项】树与二叉树
使用双亲表示法:每个结点中保存指向双亲的指针,并和查的方式更加方便。注:前序、后序、层序序列遍历的两两组合是无法唯一确定一棵二叉树的。Find操作的优化:压缩路径,先找到根节点、再将查找路径上的。优化后的 并查集的Find、Union操作时间复杂度都很低。优化思路:在每次Union操作构建树的时候,尽可能让。遍历算法的应用:求树的深度(后序遍历算法的变种)注:根据思维图,尝试手写并查集的集体操作代码。十分重要,在选择题中使用的频率很高,,只需要保存指向结点的指针即可。在并查集的Find操作中,若。原创 2022-10-11 14:16:13 · 371 阅读 · 0 评论 -
【速查】排序算法
详细使用介绍参见:https://blog.csdn.net/weixin_49167174/article/details/125179719。原创 2022-11-28 14:44:44 · 273 阅读 · 0 评论 -
堆与栈的区别
注:关于堆上内存空间的分配过程,首先应该知道操作系统有一个记录空闲内存地址的链表,当系统收到程序的申请时,会遍历该链表,寻找第一个空间大于所申请空间的堆节点,然后将该节点从空闲节点链表中删除,并将该节点的空间分配给程序。调整时先在左右儿子节点中找最小的,如果父节点不大于这个最小的子节点说明不需要调整了,反之将最小的子节点换到父节点的位置。重复进行下沉操作,以满足堆的条件。思路是每次都把堆顶的元素和堆尾的元素交换,然后把除了堆尾的那个元素组成的堆进行堆化(就是把堆顶的元素进行下沉),不断重复直至堆为空为止。原创 2023-09-13 09:27:45 · 1862 阅读 · 0 评论