
数据结构
文章平均质量分 90
FlushHip
凝视深渊
展开
-
2021计算机考研408计算机学科专业基础综合冲刺复习提纲
背景我是2020年8月份中旬开始复习的,快考试的时候整理出来的这篇文档,本意是帮助自己冲刺复习用的,再加上我是计算机科学与技术专业的,所以很多知识平时都要用到,所以对我来说,需要了解的东西就会少很多,下面这些内容是我觉得需要注意的,原文档我放在GitHub上:408冲刺复习提纲.md,大家如果有补充可以提PR,能帮助到有需要的人就最好了。复习不易,大家加油。数据结构KMP算法,next数组:对应位置前缀和后缀的最长公共部分长度排序排序算法关键字比较次数与原始序列无关:简单选择排序、二分插入排原创 2021-01-04 13:10:37 · 1386 阅读 · 1 评论 -
二叉排序树删除某一指定结点
二叉排序树中删除一个结点对其祖先是没有影响的,但是对其子孙有影响.先回顾下二叉排序树的定义: 空树是二叉排序树; 左子树所有结点的值小于根节点,右子树所有结点的值大于根节点,递归定义. 设删除的那个结点为root,那么就要在左子树中找一个最大的结点来替换root或者在右子树中找一个最小的结点来替换root看图:这是一颗二叉排序树,我们删除73这个结点,就会得到下面这张图:可以看到原创 2017-11-18 00:53:12 · 6540 阅读 · 0 评论 -
控制台下字典序蛇形打印目录树
在控制台下做到类似下图的效果:具体题目背景:[点这儿].题目: 在ZIP归档文件中,保留着所有压缩文件和目录的相对路径和名称。当使用WinZIP等GUI软件打开ZIP归档文件时,可以从这些信息中重建目录的树状结构。请编写程序实现目录的树状结构的重建工作。输入格式: 输入首先给出正整数N(≤104)N(≤10^4),表示ZIP归档文件中的文件和目录的数量。随后NN行,每行有如下格式的文件或目原创 2017-11-19 01:43:13 · 635 阅读 · 0 评论 -
树状数组简单易懂的详解
树状数组确实是个好东西啊,以前搞比赛的时候了解过它,会套用模版,但确没有深入理解这个东西,先学会用轮子,然后再学造轮子嘛,这段时间再回头研究了一下,发现二进制在算法中真的是的好东西,它可以使算法的时间复杂度降到n的二进制表示中的1相关,大家都知道,求一个二进制中的1的个数,这个时间复杂度为O(logn)" role="presentation" style="position: relative;原创 2018-01-25 19:29:05 · 63166 阅读 · 59 评论 -
完全理解ST稀疏表在线处理RMQ问题及RGQ问题
ST是什么STSTST的全称是SparseTableSparseTableSparse\quad Table。谷歌上的解释如下: Sparse Table is a data structure that answers static Range Minimum Query (RMQ). It is recognized for its relatively fast query an...原创 2018-07-20 13:52:59 · 1501 阅读 · 0 评论 -
ST算法处理RMQ和RGQ问题的4个例题
ST算法处理RMQ和RGQ举例POJ3264 - Balanced Lineup洛谷1890 - gcd区间ST算法简单应用POJ3368 - Frequent valuesHDU5726 - GCD原创 2018-07-30 00:10:38 · 923 阅读 · 0 评论 -
二叉搜索树的前驱与后继的查找
二叉搜索树的中序遍历是升序的。那么现在给你树中的任意一个结点,要你求这个结点的前驱和后继。你该怎么搞?这个问题不是那么简单的,分下面几种情况结点数据结构是否包含父节点的指针有没有给你根节点如果结点的数据结构没有给父节点指针也没有告诉你根节点,那么是不可能求出该结点的前序与后继的;其次结构中包含父节点指针,那么也就相当于给了你根节点。这里我们主要讨论结点中不包含父节点指针但是告诉你根节点...原创 2018-09-23 14:48:44 · 4536 阅读 · 2 评论 -
数据结构经典例题解析C/C++代码实现(一)
考研需要吧,虽然挺基础的,但是还是要练习下的,而且,还可以帮助一些其他同样需要这些代码的朋友。第一题题目编一C程序,它能根据读入的数据构造有向图G,并输出G的邻接矩阵及G的拓扑序列。图的输入形式为 i0  j0  i1  j1  i2  j2原创 2018-10-13 09:13:27 · 2646 阅读 · 0 评论 -
数据结构经典例题解析C/C++代码实现(二)
第一题题目编一C程序,它能把读入的整数依次插入到一个初始为空的二叉排序树中,一直读到-9999为止(-9999不插入该二叉排序树)。输出该二叉排序树的前序序列、后序序列及叶结点的个数。(输入时,两个相邻的整数用空格隔开)。解析C语言C++第二题题目编一C程序,它能对输入的一串整数(不多于1000个,以-9999为结束标记)到数组a中,再对a的元素进行直接插入排序(从小...原创 2018-10-13 11:08:24 · 842 阅读 · 0 评论 -
2019年全国研究生入学考试计算机学科专业基础综合(408)数据结构编码题
有一个带头节点的单向链表(a1,a2,…,an−1,an)(a_1, a_2,\dots,a_{n-1},a_n)(a1,a2,…,an−1,an),nnn为偶数,使用空间复杂度为O(1)O(1)O(1)的算法使其变成(a1,an,a3,an−2,…,a4,an−1,a2)(a_1, a_{n},a_3,a_{n-2},\dots,a_4,a_{n-1},a_2)(a1,an,a3,...原创 2018-12-25 14:15:37 · 8338 阅读 · 8 评论 -
线段树浅析及其指针式C/C++写法
hihocoder 19 - 22线段树节点的数据结构typedef struct Node { int data; Node *lchs, *rchs; Node (int data = 0, Node *lchs = nullptr, Node *rchs = nullptr) : data(data), lchs(lchs), rchs(r...原创 2019-04-23 16:33:40 · 1052 阅读 · 0 评论 -
二叉树前序、中序、后序遍历的非递归写法
由于考研需要考到这个知识,因此写了代码实现了下,顺便整理下.前序和中序遍历的非递归写法都比较好实现,后序遍历稍微复杂一些.数据结构定义:struct Node{ char c; pNode lchild, rchild; Node(char c, pNode lchild = nullptr, pNode rchild = nullptr) : c(c), l原创 2017-10-25 18:19:07 · 7036 阅读 · 2 评论 -
用链表实现大整数加法
背景:LeetCode - 2. Add Two Numbers描述: 给你两个不为空的链表,而且链表中的数字是反序的,现在要你求出这两个链表所代表的数字的和,同样用链表表示。链表的定义: // Definition for singly-linked list. struct ListNode { int val; ListNode *next; ListNo原创 2017-04-25 15:25:39 · 6699 阅读 · 0 评论 -
顺序表操作集
本题要求实现顺序表的操作集。函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef int Position;ty原创 2017-04-12 16:00:38 · 1311 阅读 · 0 评论 -
求链式表的表长
本题要求实现一个函数,求链式表的表长。函数接口定义:int Length( List L );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode List;L是给定单链表,函数Length要返回链式表原创 2017-04-12 16:07:10 · 1806 阅读 · 0 评论 -
链式表的按序号查找
本题要求实现一个函数,找到并返回链式表的第K个元素。函数接口定义:ElementType FindKth( List L, int K );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode List原创 2017-04-12 16:20:05 · 1122 阅读 · 0 评论 -
链式表操作集
本题要求实现链式表的操作集。函数接口定义:Position Find( List L, ElementType X );List Insert( List L, ElementType X, Position P );List Delete( List L, Position P );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LN原创 2017-04-12 17:13:22 · 2241 阅读 · 0 评论 -
带头结点的链式表操作集
本题要求实现带头结点的链式表操作集。函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中List结构定义如下:typedef struct LNode原创 2017-04-12 17:28:51 · 1422 阅读 · 0 评论 -
在一个数组中实现两个堆栈
本题要求在一个数组中实现两个堆栈。函数接口定义:Stack CreateStack( int MaxSize );bool Push( Stack S, ElementType X, int Tag );ElementType Pop( Stack S, int Tag );其中Tag是堆栈编号,取1或2;MaxSize堆栈数组的规模;Stack结构定义如下:typedef int Positi原创 2017-04-13 00:22:46 · 2388 阅读 · 1 评论 -
求二叉树高度
本题要求给定二叉树的高度。函数接口定义:int GetHeight( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTree Left; BinTree Right;};要求函数原创 2017-04-13 00:28:06 · 962 阅读 · 0 评论 -
二叉树的遍历
本题要求给定二叉树的4种遍历。函数接口定义:void InorderTraversal( BinTree BT );void PreorderTraversal( BinTree BT );void PostorderTraversal( BinTree BT );void LevelorderTraversal( BinTree BT );其中BinTree结构定义如下:typedef st原创 2017-04-13 00:48:48 · 1638 阅读 · 0 评论 -
判断一棵树是不是二叉搜索树
背景:LeetCode - 98. Validate Binary Search Tree 方法: 我们先要看看二叉搜索树的定义,根节点的值要大于左子树的任意节点的值,小于右子树任意节点的值,而且左右子树都是二叉搜索树。 那我们我们要获取左右子树的最大值和最小值,用左子树的最大值与右子树的最小值比较。满足大小关系,而且左右子树都是二叉搜索树这个时候这棵树就是二叉搜索树,同时,利用求出来的左原创 2017-04-28 21:20:46 · 1431 阅读 · 0 评论 -
字符串字典树判重Linux内核代码风格
背景:LeetCode - 127. Word Ladder 解决: 简单的广搜,用C++真的太好实现了,STL确实强大,但是用C语言来写呢?其实关键点就在于字符串如何判重,STL里的set可以搞,但是注意C里面没有这个东西,所以要么我们自己手写一个红黑树来实现set(红黑树不好写!很麻烦),要么就使用字典树(这个确实相对来说好些得多)。写这个题其实也是自己想多学学C语言中一些高级的东西,所以就原创 2017-05-04 00:17:13 · 880 阅读 · 0 评论 -
单链表逆转
本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToN原创 2017-04-12 15:30:16 · 777 阅读 · 0 评论