![](https://img-blog.csdnimg.cn/20190927151124774.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
姬小野
这个作者很懒,什么都没留下…
展开
-
一个栈字典序排列
时隔这么久又重新学算法, 惭愧.此题是牛客网一次比赛题, 拖了很久, 不过认真思考去做, 发现其实很简单. 简单地画个图, 推导一下排序过程, 就OK了.百度了一下, 发现关于栈排序的博客大都是双栈全排的, 大概那个要更复杂些. 不多说栈和排序 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Form原创 2018-01-23 11:13:02 · 909 阅读 · 2 评论 -
map映射_映射规则_二维映射_STL
map是STL中映射. 使用起来还是很方便的. 支持自定义排序规则(对key) 支持多维映射常用操作 #include < map> map< string, int> dict; map< string, map< int, string> >dict; count()函数 erase()函数 empty()函数 ins...原创 2018-04-15 14:34:10 · 1332 阅读 · 0 评论 -
四种基础排序算法
希尔排序归并排序递归版本非递归版本希尔排序希尔排序(ShellSort) 的思路有点奇特, 或许是书上表述的不清或许是我理解歪了, 真正了解希尔排序是怎样一种排序方法花了了差不多一个小时. 现在理解透了, 觉得真是很妙. 按照所规定的步长, 覆盖全部元素, 跳跃着进行插入排序, 暂时忽略中间的元素. 这也许就是希尔排序的内涵.大概分为两个过程...原创 2018-06-08 18:03:17 · 1237 阅读 · 0 评论 -
前序+中序重建二叉树
如何构建一棵二叉树?代码只有自己真正写的时候才会发现很多漏洞. 因为当我写好代码, 以为一切万事大吉的时候, 发现一切根本不是那么回事! 所有的一切都崩塌了!输入一组数据就可以构建二叉树? too young too simple ! 不过我还是那样干了, 按照书上说的插入方法, 每次传递一个数就在二叉树中插入一个数, 就这样构建起了一棵经不起考验的二叉树. 按照插入的规则找到第一个N...原创 2018-07-13 16:43:55 · 375 阅读 · 1 评论 -
二叉查找树
什么是二叉查找树?如何建立一棵二叉树?首先, 定义结构体作为树的结点的存储方式.获取数据构建二叉查找树插入函数中序遍历二叉树删除操作前驱与后继如何求得前驱和后继findMax()函数findMin()函数删除的逻辑理解完整代码什么是二叉查找树?二叉查找树是一种特殊的二叉树, 又称为排序二叉树, 二叉搜索树, 二叉排序树.递归定义如...原创 2018-07-13 23:31:48 · 200 阅读 · 0 评论 -
静态二叉树
二叉树也可以是静态的, 和指针的动态所不同的是,二叉树的静态是用结构体数组实现的, 访问指针变成了访问数组下标所在结点, 原来指针指向的位置变成了存储下标.可以说这种方法对于不了解指针的人来说是非常友好了.结构体定义:struct Node { int data, left, right;} node[maxn];昨天我使用前序和后序构建静态二叉树时, 发现按照动态的方式...原创 2018-07-14 10:06:41 · 1043 阅读 · 0 评论 -
P1111 修复公路_并查集_Kruskal
题目背景 AA 地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车。政府派人修复这些公路。 题目描述 给出A地区的村庄数 NN ,和公路数 MM ,公路是双向的。并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修完这条公路。问最早什么时候任意两个村庄能够通车,即最早什么时候任意两条村庄都存在至少一条修复完成的道路(可以由多条公路连成一条道路) 输入输出格式...原创 2018-07-26 20:38:26 · 760 阅读 · 0 评论 -
P1525 关押罪犯_并查集
P1525 关押罪犯 传送门这道题是用并查集来写的, 但普通的并查集是做不出的. 所以需要用到一些巧妙地思维.首先给边排序, 权值更大的在前面. 用贪心的思想(类似Kruskal算法)遍历边, 直到某一条边的两个顶点必须在同一个集合里面(一共只有两个集合).这题的难点就是如何判断两个顶点一定在同一个集合. 所谓敌人的敌人就是朋友, 也就是说对于一个点, 如果它此前没有敌人, 那么遇到的...原创 2018-08-05 11:29:23 · 228 阅读 · 0 评论 -
随机树生成算法(就是树!)
一个生成随机树(此树非彼数)的算法,树的结点编号从1开始,这个算法生成了树的结点个数、树的结点的权值、树的每条边的结点。如下面是一棵10结点的二叉树的生成结果:10-23 -44 -51 -9 13 51 62 11 -63 19 6 96 49 29 34 74 12 52 83 10 思路是将结点编号1-n push进vector中,然后随机选一个点为root,并从...原创 2019-04-02 12:30:05 · 11545 阅读 · 6 评论 -
二叉树的遍历_前序-中序-后序_递归
前序遍历( Preorder Tree Walk). 按照根节点, 左子树, 右子树顺序给出节点编号.中序遍历( Inorder Tree Walk). 按照左子树, 根节点, 右子树顺序给出结点编号后序遍历( Postorder Tree Walk). 按照左子树, 右子树, 根节点顺序给出结点编号这三种遍历方法十分接近, 思路上, 使用递归表达, 每个递归函数做好当前的工作就好了,...原创 2018-03-06 12:37:19 · 238 阅读 · 0 评论 -
二叉树的表达_结构体数组
思路是用结构体储存数的一个结点的信息, 其中包括parent, left, right;因为是二叉树, 所以不必使用左子右兄弟法同时, 因为本题二叉树的结点数量固定, 因此可以利用结构体数组来实现.涉及几个操作: 建立一棵二叉树 求二叉树各结点的深度 求二叉树各结点的高度 得到二叉树的信息并输出其实比上一篇有根树的表达更简单#include &l...原创 2018-03-06 09:18:10 · 1204 阅读 · 0 评论 -
有根树的表达_左子右兄弟表示法
这是<<挑战程序设计竞赛2>>上的一节, 介绍了用左子右兄弟的方法存储一棵有根树.用递归的方法求出所有结点的深度, 复杂度为O(n)或者是单独求出一个结点的深度(递归或是循环)以及如何遍历一个结点的所有子结点#include <bits/stdc++.h>using namespace std;#define MAX 1005struct...原创 2018-03-06 09:13:33 · 3031 阅读 · 8 评论 -
双栈排序
此篇博客要讲的是双栈排序, 即已知一个不规则栈的元素, 利用另一个空栈, 进行排序.我上一篇博客讨论了只用一个栈进行排序的情况, 因为栈这种数据结构的先入后出的特性, 只用一个栈很有可能无法全部排序, 只能获得字典序最大的排列. 而使用两个栈, 则可以全部排列.如何利用两个栈排列呢?此处讨论从栈顶到栈底的升序排列(对stack2).首先从stack1中取出一个元素temp, 然后从顶开原创 2018-01-23 13:51:33 · 285 阅读 · 0 评论 -
字典树_Trie树_单词查找树
如果你觉得这篇博客对你有所帮助, 请在左边点个赞吧: )下面我们先提出几个问题: 已知有n个长度不等的母串, 以及一个长度为m的模式串, 求该模式串是否为其中一个母串的前缀.这个问题应该如何解呢? 按照最常规的暴力方法, 使用线性搜索, 从头到尾挨个查找, 时间复杂度将会达到O(n*m), 如果n或m很大, 或者需要查找的模式串很多, 那么时间复杂度将会非常的大.再看另一问原创 2018-01-10 19:30:45 · 682 阅读 · 0 评论 -
STL_vector_不定长数组
vector是STL中的一种容器, 是一种不定长的数组.包含在vector头文件中 使用方式为 vectorvec; //定义了一个vec数组 vector vec(10); //定义了元素数, 各元素都为0有 size()函数 //返回数组元素数, 即数组大小 resize()函数 //重置数组大小 push_back(argu)原创 2018-02-03 16:54:31 · 316 阅读 · 0 评论 -
STL_set_集合
——————2018-4-14更新——————— set中判定一个元素是否存在除了用find, 还可以用count()函数 如果存在, 返回一, 如果不存在, 返回0. (元素的数量)set的排序规则, 使用cmp结构体#include <iostream>#include <set>using namespace std;struct cmp {...原创 2018-02-03 17:40:48 · 238 阅读 · 0 评论 -
STL_queue_队列
包含在头文件 #include 有一下常用函数 push(x) 把x压入队尾 pop() 弹出队顶元素 front() 返回队顶元素 back() 返回队尾元素 size() 返回队列的元素数 empty() 返回bool数简单代码示例#include #include using namespace std;int ma原创 2018-02-06 11:23:28 · 196 阅读 · 0 评论 -
并查集基础
并查集是一种很有趣的数据结构. 最清楚说明并查集的例子是亲戚问题, 今天是大年初二, 四处亲戚来拜年, 学习并查集真是应景. 并查集是我新年学的第一种数据结构. 之前接触它的时候觉得这个名字的DS很复杂, 因为不了解且很难望文生义, 不过接触了之后, 发现比较简单的. 所以, 学算法千万不能畏难, 因为各种算法都不会是简单的, 但也不会是很难的. 只要你多去做做, 自己写写, 理解了就...原创 2018-02-17 19:20:34 · 169 阅读 · 0 评论 -
二叉搜索树_插入_查找_删除
声明: 第一次写二叉搜索树, 可能会有bug这棵二叉搜索树以中序遍历的方式输出, 所以插入(存储的规则也是按照中序遍历的规则)#include <iostream>using namespace std;struct Node { int key; Node *parent, *left, *right;};Node *root, *NIL;...原创 2018-03-11 23:45:17 · 176 阅读 · 0 评论 -
二叉堆_完全二叉树_优先队列
完全二叉树的逻辑结构是树结构, 但由于其特殊性, 数据结构中常用数组来存储.访问父节点, 左子结点, 右子节点都很方便 数组存储以1为起点 假设有某一结点u A[u/2]为其父节点, 当且仅当u>1 A[u* 2]为其左子结点, 当且仅当u*2 <= n A[u* 2 +1]为其右子节点, 当且仅当u*2+1 <= n#include &...原创 2018-03-12 22:54:18 · 328 阅读 · 0 评论 -
算法分析与设计-第二次实验
文章目录01背包问题部分背包问题会场安排问题树的最大连通分支算法设计与分析课的实验,一共四道题目,都是用文件读写,并且给出了每道题的随机数据生成方法。博客仅放上代码,以供参考。01背包问题#include <iostream>#include <fstream>#include <ctime>using namespace std;const ...原创 2019-04-02 12:59:01 · 427 阅读 · 0 评论