数据结构
Lilyan_blog
这个作者很懒,什么都没留下…
展开
-
堆积木(动态数组vector)
1.问题描述:2.算法分析:这道题目开始看了好久都没看明白,其实题目大概意思是这样。就是有一排容器,编号为 1,2,3\cdots n1,2,3⋯n,初始时编号为 i的容器有 编号为i的积木。然后有m次操作,每次操作会把容器 aa 的积木都移动到 容器 bb。比如,你输入2 2,说明初始时有两个容器,每个容器中有两个元素。理解样例输入:样例1:第一次12,把第二堆的积木放在...原创 2018-11-03 10:31:33 · 1893 阅读 · 0 评论 -
图的遍历——dfs OR bfs
1.什么是图的遍历?从图的某一个顶点出发,沿图中的路径依次访问图中的所有顶点,并且使得图中所有顶点都恰好被访问一次,这一过程即为图的遍历。注意:这里讨论的图特指连通图上进行遍历。2.图的遍历——dfs(深度优先搜索)简介:开始我们假设图上所有的顶点都未被访问,选择图中任一顶点,开始执行以下操作:1.访问当前顶点v,并将该顶点标记为已访问。2.遍历与顶点v相邻的所有顶点c,然后对顶点v所...原创 2019-04-30 20:00:27 · 406 阅读 · 0 评论 -
并查集练习题以及带权并查集简介
1.并查集模板(luogu——P3367)1.问题描述:题目链接2.分析:这道题目就是一道普通的并查集模板题目,只要对并查集的初始化,查找,合并有所了解或者看到上一篇介绍并查集算法的文章,直接敲即可,这里不过多赘述。3.AC_Code:#include <bits/stdc++.h>using namespace std;const int maxn = 1e4 + 5...原创 2019-04-29 21:14:09 · 782 阅读 · 0 评论 -
高级数据结构——优先队列求n个最小和
1.优先队列的简介:想必我们之前了解过了队列这个数据结构。利用队列的先进先出的性质,可以解决很多实际问题,但对于一些特殊的情况,队列是无法解决的。例如,我们在医院里,重症急诊患者肯定不能像普通患者那样依次排队就诊。这时候我们还是使用队列的先进先出的原则,那重症患者不就凉凉了,所以我们要使用一种更高级的数据结构——优先队列,先访问优先级高的元素。优先队列的操作与普通队列差不多。但是相比于队列...原创 2019-04-23 21:54:24 · 466 阅读 · 0 评论 -
基础数据结构——二叉树的遍历
1.二叉树的递归定义:a.要么二叉树没有根节点, 是一棵空树。b.要么二叉树由根节点、左子树、右子数组成,且左子树和右子树都是二叉树。通俗的解释一波:一个家族里面,可以把爷爷说成父亲的父亲,而曾祖父则为父亲的父亲的父亲,这样家族里自己的直系血缘的男性都可以用"父亲"这样的递归定义来定义了。下面给出几种二叉树图:D为完全二叉树, E为满二叉树。2.完全二叉树与,满二叉树:a.满二叉...原创 2019-04-22 22:07:06 · 318 阅读 · 0 评论 -
蓝桥杯学习之数据结构——图论基础知识简介
##1.图的基本概念:图是由一系列顶点和若干连结顶点集合内两个顶点的边组成的数据结构。数学意义上的图,指的是由一系列点与边构成的集合,这里我们只考虑有限集。通常我们用G = (V, E)表示一个图的结构,其中V表示点集, E表示边集。在顶点集合所包含的若干个顶点之间,可能存在着某种两两关系——如果某两个点之间的确存在这样的关系的话,我们就在这两个点之间连边,这样就得到了边集的一个成员,也就是...原创 2019-04-14 20:58:44 · 1567 阅读 · 0 评论 -
高级数据结构——并查集基本操作
1.并查集概述:a.什么叫并查集?从字面意思理解,并就是合并,查就是查询,集就是集合的意思。并查集是一种用于分离集合操作的抽象数据结构类型。它所处理的是集合之间的关系,即动态维护和处理集合元素之间复杂的关系,当给出两个元素的一个无序对(a,b)时,需要快速合并a和b所在的集合,这期间需要反复查找某个元素所在的集合。b.简介:在这种数据类型中,n个不同的元素被分为若干组,每组是一个集合,这...原创 2019-04-21 19:53:28 · 862 阅读 · 0 评论 -
数据结构基础——链表的基本操作
1.链表的简介:链表属于线性表数据结构中的一种,线性表分为顺序表和链表,顺序表可以理解为数组。按正常方式定义一个数组时,计算机会从内存取出一块连续的地址来存放给定长度的数组;而链表则是由若干个结点所组成,(每个结点代表一个元素),且结点在内存中的存储位置通常是不连续的。那么链表比数组方便在哪里呢?比如我们要在一个序列中添加某一个元素,这时候使用数组就比较麻烦了,他需要将需要插入的位置后面的...原创 2019-04-15 21:39:43 · 541 阅读 · 1 评论 -
BFS广度优先搜索入门
1.BFS简介:2.BFS与DFS的区别:3.实现BFS的准备:最常用的BFS的模板如下:void bfs(起始点) { 将起始点放入队列中; 标记起点访问; while (如果队列不为空) { 访问队列中队首元素x; 删除队首元素; for (x 所有相邻点) { if (该点未被访问...原创 2019-02-06 15:35:47 · 427 阅读 · 0 评论 -
括号匹配问题
1.问题描述:2.算法分析:括号匹配问题是比较经典的问题。我们可以使用栈这样的数据结构来解决。我们扫描字符串压将‘(’入栈中,然后如果是’)’我们则可以从栈中弹出一个’('来与之匹配,这样就可以解决并保证最近的两个括号相匹配了,根据题目要求我们在记录下匹配的位置即可。因为题目中说答案不唯一就是说位置可以换一下。比如样例一输出1 42 3如果我们输出2 31 4这样子也是可...原创 2018-12-22 20:01:27 · 465 阅读 · 0 评论 -
计蒜客打印锯齿矩阵
1.问题描述:2.算法分析:因为发现数组的长度不是固定的,而是可变的,所以我们不能使用静态数组,我们可以使用动态数组vector来做。先确定使用的数据结构vector然后就是先对数组赋值,将比如上题将12个元素赋值,然后有一个要注意的点,就是如果某一行都没有数据,那么,直接换行空一行出来。当没有数据的时候vector数组的长度必然为0再依次打印即可。3.源代码分析:#...原创 2018-11-02 20:19:35 · 387 阅读 · 0 评论 -
动态数组vector简介(Java和C++)
1.概念描述:vector名为动态数组有些时候想开一个数组,但是却不知道应该开多大长度的数组合适,因为我们需要用到的数组很可能会根据情况变动。这时候我们就需要用到动态数组。所谓动态数组,也就是不定长数组,数组的长度可以根据我们需要动态改变。动态数组的实现也不难,因为在C++和Java里面已经写好了标准模板库(STL)。C++中动态数组写作vector,Java中写作ArrayList,C...原创 2018-11-02 19:17:27 · 2093 阅读 · 0 评论 -
STL库中的集合set简介(C++,Java)
1.简介:集合是数学中的一个概念,通俗地理解,集合是由一些不重复的数据组成的。比如{1,2,3}就是一个有1,2,3三个元素的集合。C++和Jav的标准库中的集合支持高效的插入、删除和查询操作,这3个操作的时间复杂度都是O(lgn),其中n是当前集合中元素的个数。如果用数组,虽然插入的时间复杂度为O(1),但是删除和查询的时间复杂度为O(n),效率太低。C++中我们常用的集合是set,在Ja...原创 2018-11-03 11:34:38 · 1091 阅读 · 0 评论 -
高级数据结构——线段树入门
引例先来看一个典型的线段树例子:有n(n <= 50000)个妹子,每个妹子有若干块钱,输入m(m <= 50000)个查询,每次询问第a个到第b个妹子一共有多少钱啊,或者说每次查询第a个妹子到第b个妹子中最有钱的妹子是谁呢,嗯哼?暴力大法自然好啊。怎奈时间不够呀。对于这一块问题我们可以尝试用线段树将时间复杂度从O(m * n)降为O(mlogn)1.线段树简介:a.什么是线...原创 2019-05-09 22:01:47 · 334 阅读 · 0 评论