数据结构
文章平均质量分 82
程序猿小张的日常笔记
软件工程大三菜菜一枚。
会实时分享软件开发方面和老师讲解的精讲笔记(很多都是自己敲的,测试成功的还有自己的理解还有课程笔记)后续还会分享一些编程语言和算法题解。
大家多多关注。
展开
-
2021数据结构学习笔记(严蔚敏版)
2021数据结构学习笔记(严蔚敏版)第2章 线性表线性表的顺序表示和实现线性表的顺序表示和实现(二级指针实现)线性表的链式表示和实现静态链表 循环链表 双向链表第三章 栈和队列栈栈的应用—递归队列第五章 数组数组第六章 树和二叉树树和二叉树二叉树的创建方式遍历二叉树及其应用线索二叉树树和森林哈夫曼树及其应用第七章 图图的基本概念和存储方式图的遍历图的最小生成树图的拓扑排序和关键路径图的最短路径第九章 查找静态查找表动态查找表(BST/AVL/B/B+/R原创 2021-12-25 00:33:55 · 2111 阅读 · 0 评论 -
学习笔记: 图的最短路径
图的最短路径带权图的最短路径从某顶点(源点)出发到另一顶点(目的点)的路径中,有一条各边(或弧)权值之和最小的路径称为最短路径。从单源点到其余各点的最短路径 迪杰斯特拉算法(Dijkstra)每一对顶点之间的最短路径 弗洛伊德算法 (Floyd)迪杰斯特拉(Dijkstra)算法迪杰斯特拉(Dijkstra)算法:依最短路径的长度递增的次序求得各条路径。其中,从源点v0到顶点vi的最短路径是v0到各点路径集合长度中长度最短者。路径长度最短的最短路径原创 2021-12-25 00:06:46 · 1385 阅读 · 0 评论 -
学习笔记:图的拓扑排序和关键路径
图的拓扑排序和关键路径原创 2021-12-24 00:51:55 · 1479 阅读 · 0 评论 -
学习笔记:图的最小生成树
图的最小生成树图的最小生成树算法1:普里姆(Prim)算法算法2:克鲁斯卡尔(Kruskal)算法图的最小生成树完全图:任意两个顶点之间都有直达的边相连的无向图。连通图:任意两个顶点之间都有路径相通的无向图。生成树:一个连通图的生成树是指一个极小连通子图,含有图中的全部n个顶点,但只有足以构成一棵树的n-1条边。构造网的一棵最小生成树,即:在e条带权的边中选取n-1条边(不构成回路),使"权值之和"为最小。最小生成树要解决的两个问题;尽可能选取权值小的边,但不能构成回路。选取n-1条原创 2021-12-23 19:11:39 · 937 阅读 · 0 评论 -
学习笔记: 图的遍历
图的遍历图的遍历深度优先搜索广度优先搜索图的遍历图的遍历是从图中某个结点出发遍历图,访遍图中其余项点,并且使图中的每个顶点仅被访问一次的过程。深度优先搜索深度优先搜索基本思想:从图中某个顶点V0出发,首先访问V0;找出刚访问过的顶点的第一个未被访问的邻接点,然后访问该结点。以该顶点为新顶点,重复此步骤,直到刚访问过的顶点没有未被访问的邻接点为止;返回前一个访问过的且仍有未被访问的邻接点的顶点,找出该顶点的下一个未被访问的邻接点,访问该顶点。然后执行步骤2.若是非连通图,则图中一定还有顶点原创 2021-12-23 02:06:12 · 743 阅读 · 0 评论 -
学习笔记:图的基本概念和存储方式
图的基本概念和存储方式图的基本概念和存储方式图的基本概念图的存储方式图的邻接矩阵表示法(数组表示法)图的邻接表表示法(链式存储法)图的十字链表表示法(链式存储法)无向图的邻接多重表表示法图的基本概念和存储方式图的基本概念图(Graph)是一种较线性表和树更为复杂的数据结构。在线性结构中,数据元素之间仅存在线性关系。在树型结构中,数据元素之间存在明显的一对多的层次关系。而在图型结构中,结点之间是多对多的任意关系。图的结构定义:图是由顶点集V和弧集R构成的数据结构。Graph = (V,R)其原创 2021-12-21 12:32:37 · 799 阅读 · 0 评论 -
学习笔记:第十章 内部排序
第十章 内部排序文章目录第十章 内部排序排序概述排序相关基本概念:排序的分类:内部排序算法的性能:内部排序的分类:序列的三种存储方式:插入排序直接插入排序折半插入排序希尔排序交换排序起泡排序快速排序选择排序简单选择排序树形选择排序堆排序归并排序基数排序各种内部排序方法比较线性表操作无序线性表的并集:如:A = (17,55,9,30,28) B = (30,68,5,17)时间复杂度O(LA*LB)有序线性表的并集:如:A = (7,15,29,38) B = (3,7,46,57原创 2021-12-21 02:57:12 · 605 阅读 · 0 评论 -
学习笔记:第五章 数组
第五章 数组第五章 数组数组的定义与顺序存储数组的定义:数组的顺序存储:数组的基本操作:普通矩阵的表示和实现:矩阵的乘法矩阵与三角矩阵行列式的值矩阵压缩存储:特殊矩阵简介:存储方案:三角矩阵带状矩阵稀疏矩阵:第五章 数组数组的定义与顺序存储数组的定义:数组A为n(n>0)个元素的有穷序列,记作A=(a1,a2,…an)ai(1<=i=<n)或者全部为相同数据类型的原子项ei(即具体数值);或者全部为具有相同定义的数组Bi。数组A=(a1,…,an)的维度Dim递归定义为:C原创 2021-12-17 04:13:34 · 711 阅读 · 0 评论 -
学习笔记:哈希表及其查找
哈希表及其查找哈希表及其查找哈希表哈希函数1. 直接定址法2. 数字分析法3. 平方取中法4. 折叠法5. 除留余数法6. 随机数法哈希处理冲突方法1. 开放定址法线性探测再散列 :二次探测再散列:伪随机探测再散列:2. 再散列函数法3. 链地址法4. 公共溢出区法散列表(哈希表)查找的实现散列表结构定义:初始化散列表:散列函数:插入关键字进散列表:散列表查找关键字:主函数:运行结果:散列表查找性能的分析:哈希表及其查找哈希表基于线性表的查找法:顺序查找,折半查找基于树的查找法:二叉排序树,平衡二叉原创 2021-12-17 02:13:52 · 4222 阅读 · 0 评论 -
学习笔记:动态查找表(Binary Sort /AVL/B/B+/R-B Tree简单介绍)
动态查找表(Binary Sort /AVL/B/B+/R-B Tree简单介绍)动态查找表动态查找表(Binary Sort /AVL/B/B+/R-B Tree简单介绍)二叉排序树二叉排序树的查找二叉排序树的插入二叉排序树的删除平衡二叉树(AVL树)平衡二叉排序树的类型定义AVL树失衡AVL树的调整AVL树的局部性旋转调整的方法AVL树的插入操作LL型—单向右旋RR型—单向左旋LR型—先左旋后右旋LR型—先右旋后左旋多路平衡查找树B-树B-树的结点结构示意B+树红黑树二叉排序树定义:二叉排序树或者原创 2021-12-15 03:43:03 · 390 阅读 · 0 评论 -
学习笔记:静态查找表
静态查找表静态查找表查找的相关概念顺序查找折半查找(有序表的查找)静态查找表查找的相关概念查找,就是根据给定的某个值在一组记录集合中确定某个"特定的"数据元素(记录)或者找到属性值符合特定条件的某些记录。查找表是由同一类型的数据元素(或记录)构成的集合。关键字:是数据元素(或记录)中某个数据项的值,用以标识(识别)一个数据元素(或记录)。主关键字:可以识别唯一的一个记录的关键字。次关键字:可以识别若干记录的关键字。对查找表常进行的操作:静态查找表:(1)查询某个"特定的"数据元素是否在查原创 2021-12-14 21:44:17 · 441 阅读 · 0 评论 -
学习笔记:哈夫曼树及其应用
哈夫曼树及其应用哈夫曼树及其应用哈夫曼树相关概念哈夫曼树的建立哈夫曼算法的实现哈夫曼编译码相关概念哈夫曼树设计编码哈夫曼编码的构造哈夫曼编码的译码哈夫曼编码算法(难度超级大)哈夫曼树及其应用哈夫曼树哈夫曼树又称最优二叉树,它是树的带权路径长度值最小的一棵二叉树,可用于构造最优编码,在信息传输,数据压缩等方面有着广泛的应用。相关概念路径:树中一个结点到另一个结点之间的分支序列。路径长度:路径上分支的条数。结点的权:给结点赋予的数值。带权路径长度:结点的权值就是与该结点到数根间路原创 2021-12-14 02:54:22 · 4167 阅读 · 0 评论 -
学习笔记:树和森林
树和森林树和森林1. 树的存储结构双亲表示法(结点有唯一的双亲)孩子表示法(每个结点建孩子链表)孩子兄弟表示法(二叉链表对树进行存储)2. 树,森林与二叉树的转换树转换为二叉树森林转换为二叉树二叉树转换为树二叉树转换为森林3. 树与森林的遍历树的遍历1. 树的先根遍历先根遍历算法1:2. 树的后根遍历森林的遍历1. 森林的先序遍历2. 森林的中序遍历3. 森林的后序遍历(了解)树和森林1. 树的存储结构双亲表示法(结点有唯一的双亲)其中,data是数据域,存储结点的数据信息;parent是指针域,原创 2021-12-13 21:55:54 · 545 阅读 · 0 评论 -
学习笔记:线索二叉树
线索二叉树线索二叉树内容回顾:线索二叉树:1. 线索二叉树基本概念线索二叉树的结点结构:线索二叉树的分类:2. 二叉树线索化线索化的实现方法:线索化实现算法:3. 线索二叉树的遍历线索二叉树内容回顾:二叉树的遍历过程较为复杂,需要用到递归或栈。二叉树结点的遍历序列是一个线性系列。二叉链表难以获得遍历序列前驱,后继结点信息。二叉链表中,N个结点,2N个指针,N+1个空指针。线索二叉树:1. 线索二叉树基本概念指向遍历序列前驱,后继结点的指针称为线索。把空指针修改为线索的过程称为线索化。原创 2021-12-13 19:30:07 · 1680 阅读 · 0 评论 -
数据结构复习总结:遍历二叉树及其应用(必考)
遍历二叉树及其应用遍历二叉树及其应用二叉树的遍历算法:1. 前序遍历递归实现:非递归实现:2. 中序遍历递归实现:非递归实现:3. 后序遍历递归实现:非递归实现:4. 层序遍历队列实现:二叉树的恢复:(必考)1. 由先序和中序序列恢复二叉树2. 由中序和后序序列恢复二叉树二叉树遍历的应用:1. 统计叶子结点的数目:解法1:解法2:拓展:统计二叉树中度为1的结点个数:统计二叉树中度为2的结点个数:统计二叉树中结点值为x的结点个数:2. 计算二叉树的高度:解法1:解法2:2. 计算二叉树的最大宽度:(利用层序遍原创 2021-12-13 11:32:27 · 3931 阅读 · 1 评论 -
学习笔记:二叉树的创建方式
二叉树的创建方式二叉树的创建方式1. 自底向上2. 自顶向下(二叉排序树)二叉树的创建方式1. 自底向上#include<limits.h> #include<stdio.h> #include<stdlib.h>typedef struct BiTNode{ int data; struct BiTNode *lchild,*rchild;}BiTNode, *BiTree; void merge(BiTre原创 2021-12-13 00:55:48 · 275 阅读 · 0 评论 -
学习笔记:树和二叉树
第六章 树和二叉树1. 树的定义1.1 结点的分类1.2 结点之间的关系1.3 树的其它相关概念2. 树的抽象数据类型2. 二叉树2.1 二叉树的特点2.2 特殊二叉树3. 二叉树的性质4. 二叉树的存储结构4.1 顺序存储结构构造空二叉树:构造顺序存储的二叉树T:判断二叉树是否为空:返回二叉树的深度:返回二叉树的根:返回处于位置e(层,本层序号)的结点的值:位置e的结点赋新值:返回双亲:返回左孩子:返回右孩子:返回左兄弟:返回右兄弟:前序遍历:中序遍历:后序遍历:层序遍历:逐层、按本层序号输出二叉树:4.原创 2021-12-13 00:12:07 · 1659 阅读 · 0 评论 -
学习笔记:第二部分 队列
学习笔记:队列第二部分 队列1. 队列的定义2. 队列的抽象数据类型3. 循环队列(顺序存储结构)循环队列基本操作:队列的初始化:队列的销毁:队列的清空:判断队列是否为空:返回队头元素:入队:出队:返回队列长度:测试总代码:运行结果:4. 队列的链式存储结构及实现链队列基本操作:队列的初始化:队列的销毁:队列的清空:判断队列是否为空:返回队头元素:入队:出队:返回队列长度:测试总代码:运行结果:5. 总结:第二部分 队列1. 队列的定义队列是只允许在一端进行插入操作,而在另一端进行删除操作的线性表。原创 2021-11-09 00:09:23 · 430 阅读 · 0 评论 -
学习笔记:栈的应用1_递归(重点)
栈的应用1_递归(重点)栈的应用1_递归(重点)栈的应用1_递归(重点)1. 函数调用栈2. 递归的定义3. 递归的实例(1)递归求n的阶乘(2)斐波那契数列解法1:迭代法解法2:递归法(3)n阶Hanoi塔问题1. 函数调用栈 函数调用栈一般是从高地址向低地址增长的,栈底为内存的高地址处,栈顶为内存的低地址处; 函数调用栈中存储的数据为活动记录,活动记录是函数调用时一系列相关信息的记录。 程序的栈空间可以看做一个顺序栈的应用,栈保存了一个函数调用时所需要的维护信息,包括函数参数,函数返回地原创 2021-11-01 01:48:45 · 367 阅读 · 1 评论 -
学习笔记:第三章 栈与队列
文章目录第三章 栈与队列第一部分 栈1. 栈的定义2. 栈的抽象数据类型3. 栈的顺序存储结构及实现(一)栈的定义方式:(1)栈的初始化:(2)栈的销毁:(3)栈的清空:(4)判断栈是否为空:(5)返回栈顶元素:(6)压栈:(6)出栈:(7)栈的元素个数:(8)栈元素从栈底依次输出:(二)栈的另一种方式定义方式:(1)栈的初始化:(2)栈的清空:(3)判断栈是否为空:(4)返回栈顶元素:(5)压栈:(6)出栈:(7)栈的元素个数:(8)栈元素从栈底依次输出:4. 两栈共享空间(1) 栈的初始化:(2) 栈原创 2021-10-29 04:04:35 · 687 阅读 · 3 评论 -
学习笔记:2.3 静态链表 循环链表 双向链表
2.3 静态链表 循环链表 双向链表(注意:所有代码均已成功测试。编译环境:devC++)1. 静态链表用数组描述的链表叫做静态链表,又称游标实现法。首先,让数组的元素都是由两个数据域组成,data和cur。即为,数组的每一个下标都对应一个data和一个cur。数据域data,用来存放数据元素,而cur相当于单链表中的next指针,存放该元素的后继在数组中的下标,我们通常把cur叫做下标。注意:为了方便插入数据,通常会把数据建立得大一些,以便可以有一些空闲空间便于插入时不至于溢出。//线性表的静原创 2021-10-08 02:22:09 · 571 阅读 · 1 评论 -
学习笔记:2.3 线性表的链式表示和实现(单链表详解)
2.3 线性表的链式表示和实现(注意:所有代码均已成功测试。编译环境:devC++)(一)复习:(线性顺序存储结构的优缺点)优点:无须为表示表中元素之间的逻辑关系而增加额外的存储空间。可以迅速地存取表中任一位置的元素。缺点:插入和删除操作需要移动大量元素。(耗费时间)当线性表长度变化较大时,难以确定存储空间的容量。造成存储空间的 “碎片”。(二)线性表的链式存储结构(链表)1. 单链表课本概念:用一组地址任意的存储单元存放线性表中的数据元素。以元素(数据原创 2021-09-27 19:59:51 · 679 阅读 · 2 评论 -
学习笔记:线性表的顺序表示和实现(二级指针实现)
学习笔记:线性表的顺序表示和实现(二级指针实现)**“理想主义的花,最终会盛开在浪漫注意的土壤里,我的热情永远不会熄灭在显示的平凡之中”**线性表的顺序表示和实现(二级指针实现)线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。线性表的定义:struct DynamicArray{ //数组存储元素空间的首地址 void **addr; //存储数据内存中最大能够容纳多少元素 int capacity; //容量 //当前存储数据的内存中有多少个原创 2021-09-25 03:24:06 · 406 阅读 · 0 评论 -
学习笔记:数据结构(C语言版)线性表顺序结构
第二章 线性表2.1 线性表的基本概念线性结构是一种最简单且最常用的数据结构。线性结构的基本特点是节点之间满足线性关系。1.存在唯一的一个“第一元素”;2.存在唯一的一个**“最后元素”** ;3.除最后元素之外,均有唯一的后继;4.除第一个元素之外,均有唯一的前驱。动态数组,链表,栈,队列都属于线性结构。其共同之处,是节点中有且只有一个开始节点和终端节点。按照这种关系,可以把它们的所有节点排列成一个线性序列。(他们分别属于几种不同的抽象数据类型实现)。线性表是零个或者多个数据元素的有原创 2021-09-23 23:28:24 · 1473 阅读 · 8 评论