数据结构
文章平均质量分 73
西皮呦
这个作者很懒,什么都没留下…
展开
-
数据结构 | 红黑树、平衡二叉树旋转、并查集
前提,对于一棵二叉排序树(或者说二叉搜索树),如果满足以下定义则是红黑树:①每个结点或是红色,或是黑色的。②根结点是黑色的。③叶结点(虚构的外部结点、NULL结点)都是黑色的。④不存在两个相邻的红结点(即红结点的父结点和孩子结点均是黑色的)。⑤对每个结点,从该结点到任一叶结点的简单路径上,所含黑结点的数量相同。简记为:左根右(二叉排序树),根叶黑,不红红,黑路同(黑高相同)黑高bh:从某结点出发(不包括)到达叶节点的任一简单路径上的黑结点总数补充︰。原创 2022-12-15 15:51:49 · 1318 阅读 · 0 评论 -
数据结构 | 树对应二叉树中无右孩子结点个数
作为根结点本身,在森林中的最右兄弟(见下图中的D结点)转为二叉树后也是没有右孩子的(见下图B的红色箭头),因此根节点总共提供了2个无右孩子的结点。也就是说,对于森林中的每个分支结点,都存在它的1个孩子结点,转换为二叉树后右孩子为空,设森林有n个分支结点,故有n个对应的无右孩子的结点。一图胜千言,看这张图应该会容易理解一些,黑色箭头指向作为分支结点提供的无右孩子的结点,红色表示根结点作为其本身提供的无右孩子的结点。总共有n个点,其中只有x-1个点有右孩子,剩下的n-x+1个点没有右孩子(即证)原创 2022-10-25 21:14:01 · 1688 阅读 · 0 评论 -
数据结构 | 手工求解关键路径
从前往后相加取最大,划掉不需要的路径。原创 2022-10-23 20:37:03 · 1112 阅读 · 0 评论 -
408 | 数据结构代码算法题模板技巧 之 单链表
一、数据结构定义若有错误,请指出!一、数据结构定义1.1 单链表结点结构体。原创 2022-10-14 16:24:52 · 1209 阅读 · 1 评论 -
408 | 数据结构代码算法题模板技巧 之 顺序表(数组)
1、快速排序快速排序如第一趟确定的值是首尾元素,则第二趟只能确定一个数;如第一趟确定的是中间元素,则第二趟会确定两个元素,在递归实现中表示为,左右分别要递归一次,得出两个值。//快速排序,时间复杂度为O(nlogn),空间复杂度为O(logn)return;//递归终止//枢轴元素,不考虑优化j--;//j从后往前移动,直到找到小于枢轴的元素i++;//i从前往后移动,直到找到大于枢轴的元素}//将枢轴元素放到中间//递归对左半段进行排序//递归对右半段进行排序。原创 2022-10-07 15:43:17 · 1215 阅读 · 3 评论 -
DS | 各大常用结构体定义
包含静态和动态两种方式,通常情况下,静态用数组的方式,动态会使用到开辟释放空间。原创 2022-10-02 16:37:25 · 491 阅读 · 0 评论 -
DS | 冲刺阶段考点整理 —— 绪论、线性表、栈与队列、特殊矩阵、串
循环类代码――分析每层循环的循环次数与问题规模n之间的关系,若有多层嵌套循环,则使用乘法规则。链表――链式存储,逻辑上相邻的物理上可以不相邻,用指针描述逻辑上的前驱后继关系。如:若对一棵n个结点的完全二叉树,进行遍历时,时间复杂度为O(n),空间复杂度为(logn) 树高。顺序表――顺序存储,逻辑上相邻的物理上也相邻【随机存取】Tips:目前为止,顺序表的算法题只需简单定义一个数组即可,基于数组实现算法。2、结合算法题考查,分析自己设计的算法的时、空复杂度。1、给定代码段,分析算法的时间复杂度。原创 2022-10-02 16:08:45 · 1281 阅读 · 0 评论 -
数据结构 | 【查找】考研相关结论与例题
采用顺序查找算法,对有序表从头开始查找,发现当前元素已不小于待查元素时,停止查找,确定查找不成功,已知查找任一元素的概率是相同的,则在两种表中成功查找().【解析】对于顺序查找,不管线性表是有序的还是无序的,成功查找第一个元素的比较次数为1,成功查找第二个元素的比较次数为2,以此类推,即。2、已知一个长度为16的顺序表,其元素按关键字有序排列,若采用折半查找法查找一个中不存在的元素,则比较的次数至少是(),至多是()。D选项,1、10相加除二向下取整,6、7相加除二向上取整,矛盾。下列二叉树中,可能成为折半原创 2022-07-19 21:31:03 · 3750 阅读 · 0 评论 -
数据结构 | 【排序】考研相关结论与例题
1.排序过程中,对尚未确定最终位置的所有元素进行一遍处理称为一“趟”。下列序列 中,不可能是快速排序第二趟结果的是A.5, 2, 16, 12, 28, 60, 32, 72B.2, 16, 5, 28, 12, 60, 32, 72C.2, 12, 16, 5, 28, 32, 72, 60D.5, 2, 12, 28, 16, 32, 72, 60解:D快速排序如第一趟确定的值是首尾元素,则第二趟只能确定一个数;如第一趟确定的是中间元素,则第二趟会确定两个元素,在递归实现中表示原创 2022-03-20 19:48:00 · 3815 阅读 · 4 评论 -
数据结构 | 【图】考研相关结论与例题
1、若具有n个顶点的图是一个环,则它有()棵生成树。【解析】因为n个顶点构成的环共有n条边,去掉其中任意一条便是一棵生成树,所以共有n种情况。【答案】n2、下列关于无向连通图特性的叙述中,正确的是()。Ⅰ.所有顶点的度之和为偶数Ⅱ.边数大于顶点个数减1Ⅲ.至少有一个顶点的度为1【解析】每条边都连接了两个结点,在计算顶点的度之和时每条边都被计算了两次(出度和入度),故所有顶点的度之和为边数的两倍,I正确。n个顶点、n-1条边可以构成无向连通图,比如树,Ⅱ错误。顶点数为N(N【解析】......原创 2022-03-12 18:45:29 · 2998 阅读 · 0 评论 -
数据结构 | 【树与二叉树】考研相关结论与习题
1、一棵完全二叉树上有1001个结点,其中叶结点的个数是()A.250 B.500 C.254 D.501解:法1: 结点总数为1001,奇数,故n1=0。由n=n0+n1+n2;n2=n0-1得:n=n0+n1+n0-1,即1001=2*n0-1,得 n0=1002/2=501.法2: 完全二叉树的最后一个结点编号为1001,由于其为奇数,因此其双亲结点编号为(1001-1)/2=500(若为偶数则直接除以2),双亲之后的结点都是叶结点,因此总叶结点n0=最后一个编号..原创 2022-03-09 15:30:34 · 5731 阅读 · 3 评论 -
数据结构 | 第二章 线性表 WD课后算法编程题合集【C++ / 可实现】
对长度为n的顺序表编写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法删除线性表中所有值为x的数据元素。 向上取整 即 最后一个元素下表除以 2两个思路:WD课后答案不琢磨了(两个序列各自求中位数),考试也想不到 ~ (全对满分)归并排序:不排序仅访问: 完美算法:答案所给策略非常完美 (时间复杂度o(n),空间复杂度o(1)),但是难以想到。答案的思路是两两抵消。再列举几种容易想到的算法:①构建一个大小为n的数组,用于对每个整数的计数,遍历一遍序列然后再遍历1次这个数原创 2022-07-12 20:55:55 · 1626 阅读 · 3 评论 -
数据结构 | 【排序】外部排序
外部排序指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存,需要在内存和外部存储器之间进行多次数据交换,以达到排序整个文件的目的。转载 2022-08-11 13:05:55 · 4723 阅读 · 2 评论 -
数据结构 | 【红黑树】图解原理
红黑树的插入和删除。原创 2022-07-30 21:09:56 · 1987 阅读 · 0 评论 -
数据结构 | 合并两个长度分别为m和n的有序表,最坏情况下需要比较m+n-1次
长度为m的有序表的前m-1个元素都小于长度为n的有序表的第1个元素,第m个元素大于长度为n的有序表的n个元素(即所有元素),这样比较次数就是m-1+n。最坏的情况实质上是让两指针都走完各自的链表,同时某链肯定先走完,因为一次只移动一个指针,另一个链表无论怎样都会至少少走一步,这就是m+n-1的含义。最小情况把前一个表A中的第一个值与后一个表B相比较,发现最小的值比B的最大的值都要大,是N次,因为你没办法直接访问到最后一个元素。里放一个元素,也就是说排完m+n-1个元素比较了m+n-1次。...原创 2022-07-24 19:17:27 · 6274 阅读 · 0 评论 -
数据结构 | 算法中的卡特兰数的应用
输入一个整数n,计算h(n)。令h(0)=1,h(1)=1,Catalan数满足递推式例如另类递推式递推关系的解为递推关系的另类解为//函数功能计算Catalan的第n项//函数参数n为项数//返回值第n个Catalan数{return1;//保存临时结果//h(0)和h(1)i...原创 2022-07-24 13:40:57 · 2442 阅读 · 0 评论 -
数据结构 | 折半查找 /二分查找 算法细节、二分查找判定树
假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,此时查找成功;或直到子表不存在为止,此时查找不成功。.........原创 2022-07-19 19:15:48 · 3910 阅读 · 0 评论 -
数据结构 | 随机存取、顺序存取、随机存储和顺序存储
随机存取(直接存取,Random Access)指的是当存储器中的数据被读取或写入时,所需要的时间与该数据所在的物理地址无关。随机存取就是直接存取,可以通过下标直接访问到元素的位置,与存储位置无关,时间复杂度永远为O(1),例如数组。存取第N个数据时,不需要访问前(N-1)个数据,直接就可以对第N个数据操作 (array)。随机存取的微观现实例子就是编程语言中的数组。随机存取的宏观现实例子就是我们的,通俗的说也就是我们电脑的内存条。因为RAM利用电容存储电荷的原理保存信息,所以RAM可以高速存取,且与物理地原创 2022-07-12 14:57:19 · 12678 阅读 · 1 评论 -
数据结构 | 【Hash】减少冲突的办法
原创 2022-03-19 09:46:01 · 810 阅读 · 0 评论 -
数据结构 | AVL 我现在命令你 快变回你原来的样子
原创 2022-03-17 20:37:37 · 609 阅读 · 0 评论 -
数据结构 | 串的模式匹配 KMP算法 next数组
预备知识一. 朴素模式匹配算法二、KMP算法KMP算法:最长相同前后缀,每次匹配都从匹配失误的地方开始匹配 i 不动三、求next数组1、最长公共前后缀假设有一个串P=“p0p1p2 …pj-1pj”。如果存在p0p1…pk-1pk = pj-kpj-k+1…pj-1pj,我们就说在P串中有一个最大长度为k+1的公共前后缀。2、如何寻找前后缀???找前缀时,要找除了最后一...原创 2022-03-11 12:22:19 · 1023 阅读 · 0 评论 -
数据结构 | 二叉线索树——创建中序二叉线索树、查找前驱、查找后继、按照前驱或后继遍历
#include <iostream>#include <stack>using namespace std;struct BiThrNode{ int data; BiThrNode *left; BiThrNode *right; bool ltag;//0表示left指向左子,1表示left指向直接前驱 bool rtag; //BiThrNode(int val,BiThrNode *l,BiThrNode *r,b.原创 2022-03-09 19:53:45 · 732 阅读 · 0 评论 -
【2011年全国试题3】已知循环队列存储在一维数组A[0…n-1],且队列非空时,front和rear分别指向队头元素和队尾元素。若初始时队列
【2011年全国试题3】已知循环队列存储在一维数组A[0…n-1],且队列非空时,front和rear分别指向队头元素和队尾元素。若初始时队列为空,且要求第一个进入队列的元素存储在A[0]处,则初始时front和rear的值分别是(B)A. 0, 0 B. 0, n-1 C. n-1, 0 D. n-1, n-1首先理解"队列非空时,front和rear分别指向队头元素和队尾元素"。当队列中有一个元素时,front与rear都需要指向A[0]...转载 2022-03-04 15:48:53 · 3973 阅读 · 4 评论 -
数据结构 | 斐波那契数列时间复杂度算法3种
/*前边两个为一种做法*//*后边有另外的做法(差分方程以及利用矩阵去做)*/第一种做法这是王道数据结构考研复习指导的第一章思维拓展的题目。关于斐波那契数列的简介: 斐波那契数列,又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会...转载 2022-03-04 10:51:41 · 14071 阅读 · 0 评论 -
数据结构 | 线索二叉树的原理及创建
1. 为什么要用到线索二叉树?我们先来看看普通的二叉树有什么缺点。下面是一个普通二叉树(链式存储方式):乍一看,会不会有一种违和感?整个结构一共有 7 个结点,总共 14 个指针域,其中却有 8 个指针域都是空的。对于一颗有 n 个结点的二叉树而言,总共会有 n+1 个空指针域,这个规律使用所有的二叉树。这么多的空指针域是不是显得很浪费?我们学习数据结构和算法的重点就是在想法设法地提高时间效率和空间利用率。这么多的指针域就这么白白浪费了,太败家了!所以我们要想法子好好利用它们,利用它们来转载 2022-03-04 10:33:50 · 3323 阅读 · 2 评论 -
数据结构 | 层次建树流程图 + 代码
#include<stdio.h>#include<stdlib.h>typedef char BiElemType;typedef struct BiTNode { BiElemType data; struct BiTNode* lchild; struct BiTNode* rchild;}BiTNode,*BiTree;typedef struct tag {//辅助队列 BiTree p;//树的某一个结点的地址值 struct tag*...原创 2022-03-03 19:11:41 · 392 阅读 · 0 评论 -
数据结构 | 顺序表、链表和数组是逻辑结构还是物理(存储)结构?
1.逻辑结构和物理结构的定义首先数据结构分为两个层次:逻辑结构 和 物理结构(存储方式) 。逻辑结构是用来描述数据元素之间的逻辑关系,是一个抽象概念,与数据的实际存储无关,独立于计算机存在。 物理结构是数据元素及其相互之间的关系在计算机存储器中的存储方式,简而言之物理结构就是实际的物理存储方式。 总结:逻辑结构是数据结构的抽象,物理结构是数据结构的实现,两者综合起来才建立了数据元素完整的结构关系, 只有逻辑结构,数据无法实际存储;只有物理结构,数据不知道该用哪种合适的方式存储。 逻辑结构就原创 2022-03-01 15:59:10 · 6795 阅读 · 3 评论 -
C语言督学 | 数据结构
第一章 逻辑结构与存储结构什么是数据结构:是数据之间存在一种或多种特定关系的数据元素集合为编写出一个“好”的程序,必须分析待处理对象的特性及各处理对象之间存在的关系什么是算法?算法 有限指令集 有输入或没有输入 , 一定有输出 一定在有限步骤之后终止 每一条指令必须 : 有目标无歧义 , 计算机能处理 , 不依赖于实现手段(语言等)特性输入、输出、有穷性、确定性和可行性 好的算法:应该具有正确性,可读性,健壮性,高效率和低存储量的特征逻.原创 2022-02-28 14:20:53 · 633 阅读 · 0 评论 -
数据结构 | 证明:含有n个结点的二叉链表中共有n+1个空链域
方法一:含有n个结点的二叉链表中,链域一共有2*n个(每个点有两个链域)。对于除了根结点以外的每个点都是有一个父亲结点,所以一共有n-1个指针指向某个结点,于是形成n-1个有内容的链域(减1即是父亲结点)所以一共有2*n-(n-1)=n+1个链域没有指向任何东西。方法二:二叉树中:结点数n=n1+n2+n0,(n0是度数为0的结点,也称叶子结点;n1是度数为1的结点;n2是度数为2的结点)设空链域个数为N,N=n1+2*n0,(因为度数为1的有一个空,度数为0的有两个为空)因为n转载 2022-03-09 17:56:59 · 3949 阅读 · 0 评论 -
数据结构 | 二叉树的一些性质及证明、树的路径长度、结点的路径长度
树的介绍1. 树的定义树是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:(01) 每个节点有零个或多个子节点;(02) 没有父节点的节点称为根节点;(03) 每一个非根节点有且只有一个父节点;(04) 除了根节点外,每个子节点可以分为多个不相交的子树。2. 树的基本术语若一个结点有子树,那么该结点称为子树根的"双亲.........原创 2022-03-06 18:50:22 · 6572 阅读 · 1 评论