
数据结构
_C9
咸鱼也要有咸鱼的样子
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
栈队列题目周结
这周训练了以前自学过的栈和队列的题目,把以前回顾的知识又重新练习了一遍,就这做的第一题,一直超时,下面附上题目稍微看一下为什么会超时Vasya has gotnnbooks, numbered from11tonn, arranged in a stack. The topmost book has numbera1a1, the next one —a2a2, and so on. The book at the bottom of the stack has numberanan....原创 2020-05-09 11:15:34 · 183 阅读 · 0 评论 -
树训练总结
这周练习了树和二叉树的知识,说实话,没大看明白,树是一种非线性数据结构,跟以往学习的线性结构有很大区别,到了一张图介绍一下树的基本组成和概念下面介绍一下是线性结构和非线性结构的区别,线性结构是数据元素存在一对一关系的数据结构,非线性数据结构分三种情况一、没有对应关系的数据结构二、是一对多的数据结构三、多对多的图结构和网结构下面附上两道例题方便理解一下树...原创 2020-04-11 14:14:27 · 210 阅读 · 0 评论 -
关于简单的字符串Hash
字符串Hash(KMP)属于哈希算法的一种,主要用于解决字符串匹配问题,就以前碰到这类题目我一定会去直接暴力模拟,但是这样就会超时,用字符串Hash就可以很好的解决这一种问题,他是把一段字符串转化成一种具体的数值,我们成为哈希值,通过匹配数值来判断字符串是否匹配,配上一道例题直观解决一下,这是一道我觉得很典型的例题,就可以当作KMP算法的模板The French author Georges Perec (1936–1982) once wrote a book, La disparition, wit原创 2020-06-27 11:36:14 · 235 阅读 · 0 评论 -
LCT+模板题
本篇文章根据洛谷的题解总结的https://www.cnblogs.com/flashhu/p/8324551.html做到模板题涉及这个知识点就拿来总结了,想要明白明白这个知识点需要先学习一下树状链表和Splay平衡树的知识,Spaly之前总结过可以看之前的博文动态树是一类维护森林连通性的问题,LCT(Link-Cut-Tree)就是一种动态树,应该还有很多别的类型的动态树,但是我觉得目前为止能够掌握lct的模板应该动态树的题目应该够用了,但是LCT也就只做了这一道模板题,其他的题目还没来得及做,原创 2020-11-01 21:47:53 · 346 阅读 · 0 评论 -
D. Minimal Height Tree( Educational Codeforces Round 97 (Rated for Div.2))
D. Minimal Height Treetime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputMonocarp had a tree which consisted ofnnvertices and was rooted at vertex11. He decided to study BFS (Breadth-f...原创 2020-10-28 09:34:15 · 249 阅读 · 0 评论 -
超好理解的哈夫曼树(最优二叉树)与例题
对于比较官方的说法就是给定n个权值作为n个叶子结点,构造一棵二叉树,若带权路径长度达到最小,称这样的二叉树为最优二叉树,也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近。凡是涉及带权路径最短长度的问题,也就是解决一个问题需要分成几步并且这几步需要的代价很明确,我们要求最小的代价的时候,看起来像贪心的题目,我们都可以用哈夫曼树来解决,如小明决定把所有的水果合成一堆。每一次合并,小明可以把两堆水果合并到一起,消耗的体力等于两堆水果的重量之和如一块木板分割成N原创 2020-10-27 18:22:17 · 19148 阅读 · 3 评论 -
P4913 【深基16.例3】二叉树深度
题目描述给出每个节点的两个儿子节点,建立一棵二叉树(根节点为11),如果是叶子节点,则输入0 0。建好树后希望知道这棵二叉树的深度。二叉树的深度是指从根节点到叶子结点时,最多经过了几层。最多有10^6106个结点。输入格式无输出格式无输入输出样例输入 #1复制72 73 64 50 00 00 00 0输出 #1复制4#include <iostream>#include <cmath>using name...原创 2020-10-26 20:54:29 · 454 阅读 · 0 评论 -
P4715 【深基16.例1】淘汰赛(变形线段树的模拟)
题目描述有2^n(n\le7)2n(n≤7)个国家参加世界杯决赛圈且进入淘汰赛环节。我经知道各个国家的能力值,且都不相等。能力值高的国家和能力值低的国家踢比赛时高者获胜。1 号国家和 2 号国家踢一场比赛,胜者晋级。3 号国家和 4 号国家也踢一场,胜者晋级……晋级后的国家用相同的方法继续完成赛程,直到决出冠军。给出各个国家的能力值,请问亚军是哪个国家?输入格式无输出格式无输入输出样例输入 #1复制34 2 3 1 10 5 9 7输出 #1复制1当然这..原创 2020-10-24 21:39:47 · 289 阅读 · 0 评论 -
超好理解的线段树
在讲线段树之前先用一个例子引出现在有n个数,m次操作,操作可以修改某一个数或者查询一段区间的值当然,这题修改操作O(1)就行,求和可以用O(n)方法一个个暴力去加,但是如果n和m都很大呢???就有可能超时这时有聪明小伙伴就想到了:我们可以开一个前缀和数组,这回求和操作倒是可以 O(1)了,但修改操作......每改一次,每个前缀和都要改一遍,时间复杂度就又变成了O(n).那么我们现在就可以通过引入线段树来解决这个问题了,它可以把时间复杂度降低降低再降低,把修改和查询的时间复杂度都降到 O(l原创 2020-10-23 00:13:02 · 97 阅读 · 0 评论 -
字符串算法合集
说到字符串算法我们最先想到的就是模式匹配问题,所谓模式匹配就是字符串匹配问题,就是在一个长的主串中寻找子串的过程,如果我们直接暴力匹配那就是最基本的BF算法,也就是从主串的第一个字符和子串的第一个字符匹配,如果配对成功二者都继续比较后继的字符,否则子串从头开始,主串从第二个字符开始,一步步重复上述过程,直到配对成功或者到主串尾结束,这种算法有点靠天的感觉,如果运气好了,每一次主串和子串不匹配的时候都是第一个字符就不匹配,那么时间复杂度就是O(n+m),那还可以,但如果运气不好的话,每次主串和子串不成功的匹配原创 2020-10-18 22:48:58 · 911 阅读 · 0 评论 -
输入一个中缀表达式并将其转化为后缀表达式的c++实现
#include <iostream>#include <algorithm>#include <cstring>#include <stack>#include <map>using namespace std;int main(){ char ch[100010]; cin>>ch; stack<char> s; map<char,int> m; m['.原创 2020-10-12 21:05:10 · 812 阅读 · 0 评论 -
平衡二叉搜索树的概念和实现
平衡二叉树有很多种,查阅资料后知道只要学习其中的大概两种就够用了,下面介绍一种平衡二叉树Treap树Treap树Treap是一个合成词,是Tree和Heap的合成,也就是树和堆的合成,通俗说就是树堆二叉搜索树的每一个结点都有一个键值,Treap就是为每个结点又添加了一个代表优先级的权值,对于键值来说这棵树就是一个排序二叉树,对于优先级来说这棵树就是一个堆,堆在这棵树上的体现就是,在这棵树的任意子树上,根结点的优先级最大Treap树具有唯一性,也就是每个结点的优先级互不相等,这也就让这整棵树的原创 2020-10-11 22:48:56 · 137 阅读 · 0 评论 -
数据结构—树学习小结
树是一种描述一种有层次的数据结构,并非以前我们习惯的线性结构,它是一种非线性的数据结构,它可以实现很多问题的抽像形式。关于树的最基本的术语如度,孩子节点这样的我就不再赘述了,稍稍看看课本就能明白,没有什么好说的。下面说一下树的存储结构第一种形式就是双亲表示法,因为树的特殊结构使得每个结点都有且仅有一个双亲节点,所以现在用一个一维数组存储树的每个结点,每个结点包括结点的数据信息和该结点双亲在数组中的下标,特点就是找双亲容易找孩子难第二种方式就是孩子表示法,这是基于链表的存储方式,把每个结点的孩子排原创 2020-10-04 17:13:06 · 352 阅读 · 0 评论 -
05:括号匹配
描述给定一个字符串,字符串只包含两种字符:左括号“(”和右括号”)”。请判断这些括号是否能匹配。如果能则输出Yes,不能则输出No。输入一行,括号序列(一个字符串)输出Yes/No样例输入((()))()()样例输出Yes#include <iostream>#include <algorithm>#include <stack>#include <cstdio>#include <cstring&g原创 2020-09-26 23:14:20 · 441 阅读 · 0 评论 -
04:后缀表达式求值
描述输入一个后缀表达式,计算它的值。操作数和操作码之间都以空格分开。输入一行,后缀表达式输出一行,一个整数,为后缀表达式的值样例输入16 9 4 3 + * -样例输出-47#include <iostream>#include <stack>#include <string>#include <cstring>#include <cstdio>using namespace std;.原创 2020-09-26 22:48:20 · 584 阅读 · 0 评论 -
03:火车站中的驶出的火车
描述有编号从1到N的N辆火车等待进入车站,而车站的容量是有限的,需要对火车进行调度。只有两种调度指令,进站和出站。现在车站给出了M个指令,请你输出在完成这些调度指令后,车站中驶出火车编号。输入两行第一行两个整数,N和M第二行为M个为-1或者为1的整数,-1代表出站,1代表入站输出一行整数,为驶出车站的火车编号样例输入3 31 -1 1样例输出1#include <iostream>#include <algorithm>原创 2020-09-26 22:15:24 · 437 阅读 · 0 评论 -
02:周末舞会
描述假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴。规定每个舞曲能有一对跳舞者。若两队初始人数不相同,则较长的那一队中未配对者等待下一轮舞曲。现要求写一个程序,模拟上述舞伴配对问题。输入两行第一行两个整数n和m,分别为两队的长度第二行一个整数k,表示舞曲的数目输出k行,每行两个整数n1和m1,表示配对的编号样例输入4 36样例输出1 12 23 34 11 22 3#inclu.原创 2020-09-26 21:40:37 · 336 阅读 · 0 评论 -
01:十进制转化为二进制
描述进制之间的转换是很常见的操作输入一个正整数输出对应的二进制样例输入9样例输出1001#include <iostream>#include <algorithm>#include <stack>using namespace std;stack<int> s;int main(){ int n; cin>>n; while(n) { s.p原创 2020-09-26 21:24:55 · 768 阅读 · 0 评论 -
02:构造有序的单链表
描述构造有序(升序)的单链表并实现单链表的逆置(可以采用结构化的程序设计方法实现,即不必定义类)输入输入链表中的数据。(用0表示输入的结束,0不能添加到链表中)输出按顺序输出有序链表中的数据样例输入4 1 6 8 2 0样例输出1 2 4 6 88 6 4 2 1这里用的构造升序链表的方法有点无脑,不知道有没有什么高级的数据结构可以实现升序单链表采用了头插法实现单链表的逆置,如果有时间我再详细总结单链表逆置的几种方案#include &..原创 2020-09-26 09:28:12 · 1008 阅读 · 0 评论 -
约瑟夫环问题
描述约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。输入8 1 3 (n=8 k=1 m=3 )输出7 (剩下的那个)样例输入8 1 3样例输出7#include <iostream>using namespace std;struct Node{ in原创 2020-09-24 13:28:16 · 483 阅读 · 0 评论 -
单链表的C++实现
#include <iostream>using namespace std;template<typename DataType>struct Node{ DataType data; Node<DataType> *next;};template<typename DataType>class LinkList{public: LinkList(); LinkList(DataType a[],int n.原创 2020-09-21 23:13:22 · 219 阅读 · 0 评论