数据结构
X丶
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
线段树通俗讲解
线段树的详解与应用原创 2021-03-22 12:45:36 · 160 阅读 · 0 评论 -
HUD 5687(字典树)
反思:之前在删除单词的时候,只是删除掉单词前缀以后的字符,而没有把整个单词都删除掉,导致WA了很多次。 高手请略过... AC代码: #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<string.h> using namespace std; struct Dic { Dic *nt[26]...原创 2018-12-31 14:08:13 · 203 阅读 · 0 评论 -
线性求[1,P-1]的逆元
设质数P, 假设已经知道 [ 1 , a-1 ]的逆元,现在需要求 a的逆元。 inv[1] = 1; for (int i = 2; i < MOD; i++) inv[i] = (MOD - MOD / i) * inv[ MOD % i] % MOD; ...转载 2018-12-22 10:35:13 · 484 阅读 · 2 评论 -
HDU 4826 Labyrinth(DP解法)
Problem Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向右走以前没有走过的格子,每一个格子中都有一些金币(或正或负,有可能遇到强盗拦路抢劫,度度熊身上金币可以为负,需要给强盗写欠条),度度熊刚开始时身上金币数为0,问度度熊走出迷宫时候身...原创 2018-12-21 19:35:36 · 243 阅读 · 0 评论 -
归并排序
例子: 初始关键字 [49 38 65 97 76 13 27] 分裂后: [49] [38] [65] [97] [76] [13] [27] | | | | | | | 第一次归并 [38 49] [65 97] [13 76] [27] ...原创 2018-09-13 20:49:41 · 168 阅读 · 0 评论 -
KMP算法及其优化
先简单说一下KMP的概念: 设主串为S,匹配串为T,则 栗子Ⅰ 如图: 步骤①中 S[1~5]与T[1~5]都匹配,S[6]与T[6]不匹配 由T中可得 T[1] ≠ T[2] ≠ T[3] ≠ T[4] ≠ T[5], 然而 T[2]=S[2] , T[3]=S[3] , T[4]=S[4] , T[5]=S[5] 所以 T[1] ≠ S[1~5] ,即②③④⑤的比较都...原创 2018-09-15 21:59:14 · 3513 阅读 · 1 评论 -
散列表查找(哈希表)
散列函数构造经常要考虑: 1.散列表的长度 2.关键字的长度 3.关键字的分布情况 4.计算散列函数所需的时间 5.记录的查找频率 一个“好”的散列函数应遵循一下两条原则 (1)函数计算要简单,每一关键字只能有一个散列地址与之对应 (2)函数的值域需在表长范围内,计算出的散列地址的分布应均匀,尽可能减少冲突 构造散列函数的几种常用分析法:数字分析法、平方取中法、折叠法、除留...原创 2018-09-07 19:59:26 · 402 阅读 · 0 评论 -
二叉树由前序中序求后序
#include<iostream> using namespace std; char Pre_order[10]; char In_order[10]; void getPost(int root, int start, int end) { if (start > end)return; int i = start; while (i <= end&...转载 2018-08-23 21:13:16 · 260 阅读 · 0 评论 -
用链表实现邻接表
#include<iostream> using namespace std; #define maxvex 10 struct EdgeNode { int adjvex; //连接的顶点 EdgeNode *next; //指向下一条出边 }; struct VertexNode { int data; //点的数据 EdgeNode *firstedge...原创 2018-08-26 17:40:07 · 899 阅读 · 0 评论 -
线索二叉树
当我们建立二叉树的时候,会有很多多出来的空指针没有利用好,这就不符合我们勤俭节约的好习惯了 例如: 其中∧表示的就是空指针 我们可以对其进行线索化,从而达到充分利用好空指针 首先, 我们可以使左非空指针指向它的左孩子,右非空指针指向它的右孩子 我们可以使左空指针指向它的前驱,右空指针指向它的后继 经过某种遍历后会发现,二叉树就会变成一个双向链表 其中:虚线箭头指...原创 2018-08-16 21:37:45 · 298 阅读 · 0 评论 -
用链表实现栈
结点 ● {data;next} data:结点数据 next:指向结点的下一个结点 思路: ●(1)——●(2)——●(3)——●(4) ⬆ 栈顶 ●(3) = ●(4) ->next #include<iostream&g...原创 2018-08-08 22:20:19 · 211 阅读 · 0 评论 -
用链表生成前序二叉树
介绍一下二叉树的3种遍历方式: 前序遍历:先访问根结点,然后每个结点先遍历左孩子,再遍历右孩子 中序遍历:先从根结点开始(注意并不是先访问根结点),每个结点先遍历结点的左孩子,再遍历父结点,再遍历右孩子 后序遍历:从左到右先孩子再到父亲 我们可以用递归对二叉树进行遍历: (以下几种遍历代码形式十分相似) 前序遍历: void TreeTraveler(Node *...原创 2018-08-11 21:12:31 · 471 阅读 · 1 评论
分享