数据结构
文章平均质量分 68
数据结构
Se_ren_di_pity
这个作者很懒,什么都没留下…
展开
-
数据结构——树、二叉树、二叉搜索树
树结构是一种数据结构。它由结点以及连接结点的边构成,如图所示:其中圆点表示结点,实线表示连接结点的边黑色的结点我们称为根,是一棵树的起始点,如果一棵树有根,我们称之为“有根树”树有以下几个概念:父结点、子结点、兄弟结点:如图中的结点1、2、3,它们具有共同的父结点,也就是结点0;而结点6、7、8,它们的父结点是结点2.相应地,我们也说结点6、7、8是结点2的子结点,而结点6、7、8相互称为兄弟节点(具有相同的父节点)叶结点:没有子结点的结点,如结点4,结点11内部结点:除叶结点以外的结点。原创 2024-03-31 23:51:45 · 631 阅读 · 1 评论 -
数据结构——队列、最大堆、优先级队列
队列是一种只允许在一端进行插入操作,而在另一端进行删除操作的线性表。队列,顾名思义,就好像我们在超市结账排队一样,先排进队的人先买单,先进入队列里的元素先出队,也就是 先进先出的特点(First In First Out,FIFO),允许插入元素的一端称为队尾,允许删除元素的一端称为队首。原创 2024-04-01 13:18:01 · 1711 阅读 · 0 评论 -
线段树:区间修改——加、乘,区间查询
【代码】线段树:区间修改——加、乘,区间查询。原创 2024-06-12 13:09:58 · 372 阅读 · 0 评论 -
数据结构——栈、括号问题及其变式
栈是一种数据结构,其按照最后进入栈的数据最先出栈的规则管理数据(Last In First Out,LIFO)其中栈中最后一个元素的下一个位置称为栈顶,相应地也存在栈底,当栈顶到达预先开好的栈的空间的时候,称为栈满;当栈内没有任何元素的时候,称为栈空一开始我们可能不理解,这样的奇怪的数据结构特点有什么作用呢?没关系,我们就先记住,后面在使用栈的时候自然就明白了。原创 2024-03-30 00:31:46 · 703 阅读 · 2 评论 -
可持久化线段树/平衡树
对于一棵树来说,我们每次单点修改的时候,无非就是修改了它的左子树或者是右子树,那么对于新的版本来说,当他修改的是左子树的节点的时候,显然我们可以继续沿用历史版本的右子树,也就是只要复制并修改一棵左子树就可以了;这就是可持久化的核心思想。操作和可持久化线段树类似,我这里采用的是FHQ-Treap实现的平衡树,在split的过程中会修改树的值,因此在split的时候需要开新点,由于merge的时候连接的都是split开的新点,所以merge就不用再开新点了。原创 2024-07-03 12:33:20 · 573 阅读 · 0 评论 -
动态开点线段树,线段树合并
而动态开点线段树,就是对于给定的区间[L,R],我一开始是一棵空的线段树,或者说有一个节点(L到R),当我需要插入某个下标为k的数的时候,我再一路创建所表示区间包含k的结点并修改(如果这个结点先前没有被创建的话),从而节省了大量的内存。当我们递归到一个结点,如果x或y在这里没有结点,那么直接搬用对方的结点过来即可(如果双方在这里都没有结点,那么这里就仍然为空节点了)对于传统线段树,我们都是把区间开满,然后要修改哪个区间,就去找包含那个区间的结点。当我们递归到叶子结点的时候,合并权值。也就是需要合并线段树。原创 2024-06-26 20:36:44 · 315 阅读 · 0 评论 -
树状数组——点修区查与区修点查
树状数组是一种代码量小,维护区间的数据结构他可以实现:1.区间修改,单点查询2.单点修改,区间查询当然,二者不可兼得,大人全都要的话,请选择线段树。原创 2024-07-01 01:18:45 · 218 阅读 · 0 评论