重学数据结构(六、树和二叉树)

树结构是一类重要的非线性数据结构。直观来看,树是以分支关系定义的层次结构。树结构在客观世界广泛存在,如人类社会的族谱和各种社会组织机构都可用树来形象表示。 树在计算机领域中也得到广泛应用,尤以二叉树最为常用。如在操作系统中,用树来表示文件目录的组织结构。在编译系统中,用树来表示源程序的语法结构。在数 ... »

联赛模拟测试20 C. Weed

题目描述 (duyege) 的电脑上面已经长草了,经过辨认上面有金坷垃的痕迹。 为了查出真相,(duyege) 准备修好电脑之后再进行一次金坷垃的模拟实验。 电脑上面有若干层金坷垃,每次只能在上面撒上一层高度为 $v_i$的金坷垃 或者除掉最新$v_i$ 层(不是量)撒的金坷垃。如果上面只留 ... »

排序算法时间复杂度分析

时间:2020-10-20 21:36:57 作者:whimouse 排序算法 稳定性: 指排序后原有数列中相同值的元素相对次序是否发生改变,若不改变,则是稳定的。 稳定性算法的好处: 若一个排序算法稳定,那么上一趟排序的结果往往可以被下一趟使用。 另外若是稳定,可以避免多余的比较或移动。 具体算法 ... »

洛谷 P2617 Dynamic Rankings 树套树

题目描述 给定一个含有 (n) 个数的序列 (a[1],a[2],a[3]……a[n]),程序必须回答这样的询问:对于给定的$i,j,k$,在$a[i],a[i+1],a[i+2]……a[j]$中第$k$小的数是多少$(1≤k≤j-i+1)$,并且,你可以改变一些$a[i]$的值,改变后,程 ... »

第四章-平衡二叉树

我们为了解决二叉树的查找,我们构建出了二叉搜索树(左子树小于其父结点,右子树大于其父结点)。但是这样显然是不够的,这样的查找太过于笨重,我们就想出了二叉平衡树: 就是一个结点的左右子树高度差不能等于2,当等于2时,我们就对它进行平衡,这样减少了极端情况,可以明显的缩小查找的时间,二叉平衡在插入的时候 ... »

第四章_树(遍历二叉树)

遍历二叉树,最常用的递归实现遍历二叉树,但我们还可以用非递归和层次遍历树的方法,这里就要用到栈和队列的一些知识,现在就让我们把这两个结合起来一起用。 这个是非递归中序遍历二叉树,非递归我们可以用栈的思想,中序遍历的时候,我们可以先一直把左子树全装栈里面,然后当装完左子树的结点后,我们就出栈并输出,然 ... »

通俗易懂的快排!

上次在面试了一次后台开发的时候,然后在交流群里和小伙伴们交流了一下,发现数据结构和算法手撕代码是大家的弱点(包括我自己也是,对数据结构和算法也没有去系统的学习过,这方面非常差劲!),为此自己趁这段时间比较充裕一点,反正也没啥事,少刷点视频,就顺便来系统学习基本的数据结构和算法了,多掌握点技能,提高自 ... »

第四章——二叉树

今天看了树的相关操作,因为树的结点我们确定,但我们唯一可以确定的就是,每个结点都只有一个父结点(可以当成孩子父亲理解)。所以我们就可以思考出一个结构来表示树:儿子兄弟表示法,但今天没有写,等下次再写。儿子兄弟表示法我们可以演化成左右子树表示法。定义如下: typedef struct TNode { ... »

链表-双向通用链表

前言 20201014 在阅读 RTOS LiteOS 内核源码时发现该内核使用的链表时通用链表,而 FreeRTOS 内核使用的时非通用链表,所以,有必要记录一下关于链表实现的笔记。 以下内容为个人笔记,涉及一些非官方词汇,敬请谅解,谢谢。 概念 正常表达 链表: 链表为 C 中一种基础的数据结构 ... »

严蔚敏版简要说明

恢复内容开始 学数据结构有一段时间了,目前学到第三章栈与队列,学习过程中对于书上的案例代码不是很理解。主要对一些代码段的与定义进行梳理 与定义常量及类型 Status(状态)是宏定义,代表返回值类型,其值是函数结果状态代码。 因为函数返回值可能为char、int、long等类型,当#define S ... »

FHQ-Treap学习笔记

什么是FHQ-Treap (Treap),一种数据结构,支持插入节点、删除节点、求第$k$大的节点、求权值为$k$的节点的排名、求权值比$k$小的最大节点、求权值比$k$大的最小节点 (Treap=Tree+heap) 其核心思想在于在权值上维护一棵二叉查找树,在优先级上维护一个堆 有旋$T ... »

链式存储的队列

今天由于一些事情耽误了,本来可以写得更多的,但是却只完成了一部分,那就从下周开始加快进度吧。 对于链式的队列,我们需声明一个头指针和尾指针front和rear,当进队的时候,我们就用尾插法插进链表,当出队的时候,我们就从头开始出。 下面就是相关的代码,由于今天的一些事情耽误了(懒才是最重要的原因), ... »

代码(前三章)

今天花了几个小时才弄出来了,还是有点不熟练,不过万幸的是终于可以自己手写了,哈哈,功夫不负有心人,直接进入正题。 顺序存储结构的单链表: typedef int ElemType;typedef struct LNode { ElemType data; struct LNode *next; in ... »

链表-双向非通用链表

前言 20201010 在阅读 RTOS LiteOS 内核源码时发现该内核使用的链表时通用链表,而 FreeRTOS 内核使用的时非通用链表,所以,有必要发布一下关于链表实现的笔记。 以下内容为个人笔记,涉及一些非官方词汇,敬请谅解,谢谢。 链接 我的Gitee 非通用链表完整C语言源码 参考 上 ... »

联赛模拟测试8 Dash Speed 线段树分治

题目描述 分析 对于测试点$1$、$2$,直接搜索即可 对于测试点$3 sim 6$,树退化成一条链,我们可以将其看成序列上的染色问题,用线段树维护颜色相同的最长序列 对于测试点$7$、$8$,肯定是车的速度越大能经过的道路越少,所以我们用类似并查集的方法从大到小依次维护联通块的直径,这里要用到一 ... »