数据结构
tomgaooo
这个作者很懒,什么都没留下…
展开
-
堆的定义以及特性
堆1.堆是完全二叉树2.通常用数组实现已知节点K,则它的父节点是k/2它的两个子节点分别为2k , 2k+1每个节点都大于等于它的两个子节点(堆的规定),但是子节点的顺序没有规定原创 2020-08-07 17:41:51 · 747 阅读 · 0 评论 -
树的相关术语
节点的度:一个节点含有的子树的个数(子节点的个数)叶节点:度为0的节点称为叶子节点分支节点:度不为0的节点称为分支节点节点的层次:根节点为1,后继节点为2,以此类推树的度:树中所有节点度的最大值树的高度(深度):树中节点的最大层次满二叉树:每一层的节点数都达到最大值完全二叉树:叶子节点只能出现在最下层和次下层,并且最下层的节点都从左往右依次放满...原创 2020-06-30 21:43:06 · 163 阅读 · 0 评论 -
快慢指针
快慢指针定义两个指针,这两个指针的移动速度是不一样的,以此来获得我们想要的差值比如快指针一次移动两个节点,慢指针一次只移动一个节点一般来说,快指针的移动步长为慢指针的两倍快慢指针寻找中间值判断链表是否有环...原创 2020-06-24 16:27:00 · 189 阅读 · 0 评论 -
树的子结构和子树的区别java
出自剑指offer的一道题《树的子结构》子树:一颗有n个节点的树也有n个子树,他的每个节点都可以作为根节点构成一颗树子结构:如下图,红框就是一个子结构,但是不是一颗子树。换句话说,下图的节点4也是一个子结构但不是子树,这也说应该就好理解了(图片侵删)原题描述:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)public class TreeN...原创 2020-04-05 12:45:44 · 1239 阅读 · 3 评论 -
用两个栈实现队列的push()和pop()
队列是先进先出栈是先进后出把最开始初始化的数据放到一个栈里,想要输出第一个数,则必须把栈1的元素全都压入栈2这个时候,我们只需要按顺序pop()栈2的元素就可以实现队列操作了此时,如果要再实现push()操作,就需要全都push()到栈1里。换句话说,栈2只负责输出,栈1只负责输入。只需要保证 栈2弹空之前,栈1的元素不能压到栈2就可以实现队列了自己画的图,有用麻烦点个赞...原创 2020-04-03 17:39:12 · 965 阅读 · 0 评论 -
数据结构-特殊矩阵的压缩存储
特殊矩阵的数据压缩对称矩阵对于对称矩阵,我们只需要存放一个上三角或者下三角就可以了,这样我们就可以节省一半的空间那么我们如何用一位数组存放这个压缩矩阵,并且能精确的求得aij的索引呢先找到前i-1行的元素,用等差数列的求和就可以然后再+j-1就可以了2.三角矩阵c表示常数需要的空间 n*(n+1)/2+1之所以+1,是因为要存储常量c下三角矩阵上三角矩阵...原创 2019-11-06 16:54:42 · 580 阅读 · 0 评论 -
数据结构-栈的可能的输出的序列个数
把可能的输出按最后一个元素分为n类以k为例比k小的元素肯定在k之前输出,也就是f(k-1),比k大的数在k后输出,也就是f(n-k)对于k来说,总的合法的输出序列个数就是f(k-1)*f(n-k)双端队列这人认为这个数据结构很bug。基本就是像一根管子,两端都可以进出...原创 2019-11-06 15:53:23 · 2542 阅读 · 0 评论 -
数据结构-栈的输出的可能结果
栈的输出的可能结果对于不连续的输入输出,得到的输出序列有多种下图红色的序列是不合法的这是有规律的关键规律如下以3124为例,为什么它是不合法的3后面的有两个比他小的数1,2,但1,2是递增序列不是递减序列,所以3124不合法依照这个规律可以验证每个序列...原创 2019-11-06 11:36:10 · 1168 阅读 · 0 评论 -
数据结构-线性表
线性表1.顺序表首先要明确顺序表并不是数组但可以用数组表示我们用结构体来表示一个顺序表typedef struct { int data[MaxSize]; int length;}sqList;注意:1.为什么要用引用类型?是因为在函数中都是对局部变量进行操作,如果不用引用的话只是对L的复制进行操作,函数体运行结束,形参也将被释放,在函数里对顺序表的操作则毫无意义。而用引用...原创 2019-10-08 09:44:55 · 551 阅读 · 0 评论