数据结构和算法
文章平均质量分 60
主要记录数据结构和算法的学习笔记
散漫的大学生
这个作者很懒,什么都没留下…
展开
-
图的基本概念和存储
基本概念图的定义:图(Graph)一般由两个集合共同构成,一个是非空但是有限的顶点集合V(Vertex),另一个是描述顶点之间连接关系的边集合E(Edge),边集合可以为空集。G = (V, E)端点和邻接点顶点的度;入度和出度完全图子图路径简单路径回路或环简单回路=简单路径+回路连通、连通图、连通子图和连通分量强连通图、强连通分量权和网连通图的连通分量只有一个(本身),而非连通图的连通分量不止一个;强连通图同理。原创 2023-06-01 16:14:10 · 603 阅读 · 0 评论 -
c语言的预处理和编译
当预处理器发现#include指令时,会查看后面的文件名并把文件的内容包含到当前文件中两种写法引用的是编译器的库路径里面的头文件。引用的是程序目录中相对路径中的头文件,如果找不到再去上面的库里面找。原创 2023-05-30 11:25:16 · 447 阅读 · 0 评论 -
树和二叉树
逻辑表示方法树形表示法文氏图表示法凹入表示法括号表示法性质树的结点数等于所有结点的度加一度为m的树中第i层最多有m的(i-1)次方个结点高度为h的m次树最多的节点数(等比数列公式求和)具有n个结点的m次树的最小高度树的遍历先根遍历后根遍历层次遍历存储结构双亲存储结构存放数据元素和双亲的位置孩子链存储结构存放数据元素和指向所有孩子结点的指针孩子兄弟链存储结构一个数据域,一个最左的孩子(长子)和下一个兄弟结点的指针域。原创 2023-05-28 09:48:43 · 782 阅读 · 0 评论 -
数组的存储和压缩
一维数组是有限个相同类型的数据元素构成的序列,逻辑关系是相邻关系推广:一个二维数组可以看作相同类型的一维数组的一维数组;n维数组可以看作以n-1维数组作为元素的线性表。原创 2023-05-28 09:41:30 · 1152 阅读 · 0 评论 -
递归的基本概念
每次调用函数都会创建一帧,保存返回地址、函数实参和局部变量,并将该帧压入调用栈,成为栈顶,函数一旦执行完毕,对应的帧就出栈,对应的控制权就返回给上层的函数,并按照该帧保存的返回值地址确定程序中继续执行的位置。原问题可以划为一个或多个子问题,且子问题的求解方式与原问题相同,只是数量规模不同。尾递归法可以通过循环或迭代的方式转换为等价的非递归算法。如果递归函数中调用递归的语句为最后一个执行语句,则称这种递归为尾递归。可以使用栈来模拟递归的执行过程从而实现转换。使用栈帧来支持函数调用。递归的调用次数必须有限。原创 2023-05-27 10:01:26 · 880 阅读 · 0 评论 -
串的定义与实现
计算机内存是以字为单位的,一个字包含多个字节。如果一个字只存放一个字符,则为非紧缩格式,存储密度较小,处理单个字符方便,运行效率较高;如果一个字只存放多个字符,则为紧缩格式,存储密度较大,处理单个字符不方便,运行效率较低。在链串中,节点大小越大,存储密度则越大,但插入、删除等操作不便;节点大小越小,存储密度则越小,但插入、删除等操方便。顺序串的字符被依次存放在一组连续的存储单元里。定义:由零个或多个字符组成的有限序列。原创 2023-05-25 09:26:23 · 62 阅读 · 0 评论 -
栈和队列的概念和实现
栈定义:只能在一端进行插入或删除操作的的线性表主要特点:后进先出存储结构的实现顺序存储结构链式存储结构用途:通常作为一种临时存放数据的容器。如果后存入的元素先处理则使用栈。比如用于保存函数调用时的所需的信息,或者在将递归算法转化为非递归算法时需要使用。原创 2023-05-24 18:51:16 · 564 阅读 · 0 评论 -
数据结构的定义
算法概述定义:对特定问题求解步骤的描述,是指令的有限序列特点有穷性,确定性,可行性,有输入,有输出算法分析分析算法占用计算机资源的多少CPU时间内存空间时间性能分析事后统计法缺点:必须执行程序,受到各种其他因素的影响事前估计法算法的执行时间是问题规模的函数。原创 2023-05-24 11:05:21 · 433 阅读 · 0 评论 -
线性表的总结
把线性表的所有元素按照其逻辑顺序依次存储到从计算机指定的存储位置开始的一块连续的存储空间中。一致性:一个线性表的所有元素的性质相同,也就是具有相同的数据类型。序列性:所有元素之间的相对位置是线性的。有穷性:一个线性表的元素个数是有限的。具有相同特性的数据元素的有限序列。组成:数据域和指针域。原创 2023-05-24 10:47:39 · 538 阅读 · 0 评论 -
高级树结构
B树(Balance Tree),是专门为磁盘数据读取设计的一种度为 m 的查找树(多用于数据库)它同样是一棵平衡树,但是不限于二叉,前面的二叉树都是基于内存读取的优化,这个是磁盘读取的优化,一棵度为4的(4阶)B树。删除最顶上的元素,此时先把排在最后面的拿上来顶替一下,按照与插入相反的方向,从上往下进行堆化操作,规则是一样的,遇到大的就交换,即使完成了出队操作,依然是最大的元素排在队首,并且整棵树依然是一棵完全二叉树。,Kn,Pn),其中P为指向子树的指针,K为键值(关键字)原创 2023-05-19 21:17:59 · 907 阅读 · 0 评论 -
线索化二叉树
一棵二叉树实际上可以由多个结点组成,每个结点都有一个左右指针,指向其左右孩子。二叉树的遍历,包括前序、中序、后序以及层序遍历都需要借助栈来帮助完成这项遍历操作。一棵二叉树的某些结点会存在NULL的情况,我们可以利用这些为NULL的指针,将其线索化为某一种顺序遍历的指向下一个按顺序的结点的指针,这样在进行遍历的时候,就会很方便许多主要有前序线索化、中序线索化、后序线索化线索化规则:结点的左指针,指向其当前遍历顺序的前驱结点。结点的右指针,指向其当前遍历顺序的后继结点。原创 2023-05-16 17:05:05 · 103 阅读 · 0 评论 -
二叉树的性质
完全二叉树除了最后一层有空缺外,其他层数都是饱满的,假设这棵二叉树为满二叉树,那么根据前面得到的性质,假设层数为。,因为除了根节点每一个结点都有一条唯一的边与父节点相连,所以结点的边数为。,根据完全二叉树的性质,最后一层可以满可以不满,那么一棵完全二叉树结点数。个,比如二叉树的第一层只有一个根结点,而二叉树的第三层可以有。,比如第3个结点的父结点为第1个节点,也就是根结点。个结点的完全二叉树,对于任意一个结点。的二叉树,可以具有的最大结点数量为。,那么此结点为二叉树的根结点,如果。也可以从边数的角度考虑。原创 2022-12-11 15:20:10 · 1815 阅读 · 0 评论 -
树和森林的转换
二叉树和树、森林之间的相互转换。原创 2022-11-30 10:35:23 · 438 阅读 · 0 评论