![](https://img-blog.csdnimg.cn/2dc6b4f208db4971ae731ad9ea5bb49c.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构
关于数据结构的一些讲解,实现。
海马有力量
Ship it!
展开
-
【PTA】L3-010 是否完全二叉搜索树 (30 分)
将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。输入格式:输入第一行给出一个不超过20的正整数N;第二行给出N个互不相同的正整数,其间以空格分隔。输出格式:将输入的N个正整数顺序插入一个初始为空的二叉搜索树。在第一行中输出结果树的层序遍历结果,数字间以1个空格分隔,行的首尾不得有多余空格。第二行输出YES,如果该树是完全二叉树;否则输出NO。输入样例1:938 45 42 24 58 30 6原创 2022-04-15 21:22:02 · 250 阅读 · 0 评论 -
实现树与二叉树的转换
算法介绍在代码注释上,时间有限,未测试^^#include<cstdio>#include<cstdlib>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int N=1010;typedef int ElemType;typedef struct Forest{ int data; Forest *child[N];}原创 2021-12-22 21:08:59 · 1609 阅读 · 0 评论 -
C语言实现哈希表
散列函数是除留余数法,冲突的处理是线性探测法。#include<stdio.h>#include<stdlib.h>#define N 100#define mod 13typedef int ElemType;typedef struct{ int *elem; int count;}HashTable;HashTable *InitHashTable(HashTable *H){ //初始化散列表 int i; H=(HashTable *)mallo.原创 2021-11-18 21:46:03 · 764 阅读 · 0 评论 -
深度优先搜索DFS的非递归实现
DFS的非递归实现借助栈,除第一个节点外其余节点逆序。输入:5 61 22 33 51 44 24 5输出:1 4 5 3 2#include<stdio.h>#include<stdlib.h>#define N 100typedef int ElemType;struct stack{ ElemType data[N]; int top;};int n;int a[N][N],vis[N];void DFS(int pos){ /原创 2021-11-11 20:56:58 · 907 阅读 · 0 评论 -
判断无向图是否是树
如图是无回路的连通图,或者有n个顶点,且有n-1条边,一次遍历即可访问所以点,此图就是树 。#include<stdio.h>#include<stdlib.h>#define N 100typedef int ElemType;int n;int a[N][N],vis[N],cnt;void dfs(int pos){ //如图有n个顶点,且有n-1条边,一次遍历即可访问所以点,此图就是树 vis[pos]=1; cnt++; int i; for(i=1原创 2021-11-11 20:29:09 · 912 阅读 · 0 评论 -
二叉树的基本操作
一些二叉树的基本操作:统计叶节点个数、翻转左右子树 、判断俩个二叉树是否相同 、二叉树的高度、二叉树的宽度。#include<cstdio>#include<cmath>#include<cstdlib>#include<cstring>#include<queue>using namespace std;typedef struct node{ int data; struct node *lift,*right;}Lnode原创 2021-11-09 21:19:29 · 386 阅读 · 0 评论 -
C语言实现双链表及其基本操作
双链表比普通的链表多了指向前方数据的指针,方便对链表的查找。不过在实现方面却复杂了不少,增加或者删除数据的时候要考虑到前后数据指针,其中的操作顺序一定不能错。#include<stdio.h>#include<stdlib.h>#define N 100typedef int ElemType;typedef struct Dnode{ ElemType data; struct Dnode *prior,*next;}Dnode,*DLinkList;DLink原创 2021-11-04 21:21:32 · 263 阅读 · 0 评论 -
C语言实现各种排序
实现了插入排序,折半插入排序,希尔排序,冒泡排序,选择排序,快速排序,归并排序。介绍见注释。#include<stdio.h>#include<stdlib.h>#define N 100typedef int ElemType;void Swap(int *a,int *b){ int t; t=*a; *a=*b; *b=t;}//插入排序:设第一个数为排好的序列,后面的数插入到前面的序列 void InsertSort(ElemType a[],int原创 2021-10-25 21:41:09 · 393 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树的非递归遍历借助栈实现,用于保存访问过的节点,便于对分支进行操作。前序遍历(根左右):访问到节点时,直接输出当前节点,栈中存入。然后有左节点存在的话,访问左节点,否则从栈中取出节点访问其右节点(自上而下访问,左节点已被访问完,再访问右节点)。中序遍历(左根右):访问到节点时,栈中存入,有左节点存在的话,访问左节点,否则从栈中取出节点,输出当前节点(自下而上输出),访问其右节点。后序遍历(左右根):也是自上而下从左节点访问,去前两种遍历不同的是后序遍历需加一个储存上一个被访问(输出)节点的变量原创 2021-10-25 18:43:52 · 485 阅读 · 0 评论 -
字符串算法——字典树
hdu1521统计难题字典树基本性质:根节点不包含字符,除根节点外的每个子节点都包含一个字符,从根节点到某一个节点,路径上经过的字符连接起来,为该节点对应的字符串;每个节点的所有子节点包含的字符互不相同。字典树模板#include<cstdio>#include<cstring>using namespace std;typedef long long ll;struct Trie{//定义字典树 Trie *next[26]; int num;//当前字符串为前缀原创 2021-05-09 13:31:34 · 180 阅读 · 0 评论 -
P3381 【模板】最小费用最大流
P3381 【模板】最小费用最大流输入输出样例输入4 5 4 34 2 30 24 3 20 32 3 20 12 1 30 91 3 40 5输出50 280最小费用最大流就在最大流的基础上增加费用,要使费用最小。解题方法是最短路+最大流,先用最短路在残留网络上求得费用最小的路径,然后更新路径的容量。因为路径的费用有负的,所以最短路使用spfa算法。#include<cstdio>#include<iostream>#include<cstr原创 2021-05-01 16:16:10 · 145 阅读 · 0 评论 -
【hdoj4280】Island Transport(最大流ISPA)
Island TransportProblem Description In the vast waters far far away, there are many islands. People are living on the islands, and all the transport among the islands relies on the ships. You have a transportation company there. Some routes are opened原创 2021-04-30 16:45:53 · 115 阅读 · 1 评论 -
P3376 【模板】网络最大流(EK)&【poj1532】Drainage Ditches(Dinic)
P3376 【模板】网络最大流最大流解决的问题就是求出原点到汇点能流过的最大流量。普通的搜索会使一些路径的流量用不到(残量),EK算法就是每次得到一条路径的流量(增广路),正向减,反向加,通过不断搜索得到最大流。#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;const int N=205;const int inf=原创 2021-04-30 10:38:41 · 101 阅读 · 0 评论 -
【PTA】L3-015 球队“食物链” (30 分)(DFS+剪枝)
L3-015 球队“食物链” (30 分)输入样例1:5-LWDWW-LDWWW-LWDWW-WDDLW-输出样例1:1 3 5 4 2输入样例2:5-WDDWD-DWLDD-DWDDW-DDDDD-输出样例2:No Solutiondfs遍历,要注意的是两两相互对局,给出的样例图并不是对称的。写到有一个测试点超时时,就感觉突破口是食物链最后的点连接着第一个点。#include<bits/stdc++.h>using namespace std原创 2021-04-16 12:22:39 · 370 阅读 · 0 评论 -
【PTA】L2-035 完全二叉树的层序遍历
L2-035 完全二叉树的层序遍历 (25分)一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。输入格式:输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。输出格式:在一行中输出该树的层序遍历原创 2021-01-27 11:34:23 · 5856 阅读 · 5 评论 -
【HDOJ3062】Party(2-sat)
HDU3062 Party Problem Description有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席。在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的。有没有可能会有n 个人同时列席?Inputn: 表示有n对夫妻被邀请 (n<= 1000)m: 表示有m 对矛盾关系 ( m < (n - 1) * (n -1))在接下来的m行中,每行会有4个数字,分别是 A1,A2,C1,C2A1,原创 2020-12-18 21:18:57 · 185 阅读 · 1 评论 -
【PTA】还原二叉树 && 根据后序和中序遍历输出先序遍历&&树的遍历
给定一棵二叉树的先序遍历序列和中序遍历序列,要求计算该二叉树的高度。输入格式:输入首先给出正整数N(≤50),为树中结点总数。下面两行先后给出先序和中序遍历序列,均是长度为N的不包含重复英文字母(区别大小写)的字符串。输出格式:输出为一个整数,即该二叉树的高度。输入样例:9ABDFGHIECFDHGIBEAC输出样例:5#include<stdio.h>#inc...原创 2019-04-23 20:12:37 · 2117 阅读 · 0 评论 -
【PTA】 关于堆的判断 (25分)
L2-012 关于堆的判断 (25分)将一系列给定数字顺序插入一个初始为空的小顶堆H[]。随后判断一系列相关命题是否为真。命题分下列几种:x is the root:x是根结点;x and y are siblings:x和y是兄弟结点;x is the parent of y:x是y的父结点;x is a child of y:x是y的一个子结点。输入格式:每组测试第1行包含2个正整数N(≤ 1000)和M(≤ 20),分别是插入元素的个数、以及需要判断的命题数。下一行给出区间[−1000原创 2020-11-26 17:45:01 · 811 阅读 · 0 评论 -
【牛客】D Router Mesh(强连通分量)
链接:https://ac.nowcoder.com/acm/contest/7501/D来源:牛客网题目描述In a Mesh networking system, there are n MI Routers, where m pairs of MI Routers are bidirectionally connected. In order to check the stability of the system, for each MI Router, we should determin原创 2020-10-26 11:49:55 · 260 阅读 · 0 评论 -
【蓝桥】产生数(dfs+大数相乘)
描述给出一个整数 n(n<10^30) 和 k 个变换规则(k<=15)。规则:一位数可变换成另一个一位数:规则的右部不能为零。例如:n=234。有规则(k=2):2-> 53-> 6上面的整数 234 经过变换后可能产生出的整数为(包括原数):234534264564共 4 种不同的产生数问题:给出一个整数 n 和 k 个规则。求出:经过任意次的变换(0次或多次),能产生出多少个不同整数。仅要求输出个数。输入n kx1 y1x2 y2…原创 2020-10-15 17:02:01 · 125 阅读 · 0 评论 -
试题 算法提高 vertex cover(dfs)
问题描述 给定一个N个点M条边的无向图G(点的编号从1至N),问是否存在一个不超过K个点的集合S,使得G中的每条边都至少有一个点在集合S中。输入格式 输入的第一行包含一个整数T,表示数据的组数。 接下来T组数据中:每组输入的第一行包含三个整数n, m,k,分别表示图的点数,边数,集合点数的最大值。接下来m行,每行2个正整数x,y,表示编号为 x 的节点与编号为 y 的节点间有一条边相连。输出格式 对于每组测试数据,若其存在解,则将解输出出来:第一行为一个整数t,表示所选点集的大小;第.原创 2020-10-09 15:52:27 · 183 阅读 · 0 评论 -
试题 历届试题 邮局(dfs)
问题描述 C村住着n户村民,由于交通闭塞,C村的村民只能通过信件与外界交流。为了方便村民们发信,C村打算在C村建设k个邮局,这样每户村民可以去离自己家最近的邮局发信。现在给出了m个备选的邮局,请从中选出k个来,使得村民到自己家最近的邮局的距离和最小。其中两点之间的距离定义为两点之间的直线距离。输入格式 输入的第一行包含三个整数n, m, k,分别表示村民的户数、备选的邮局数和要建的邮局数。 接下来n行,每行两个整数x, y,依次表示每户村民家的坐标。 接下来m行,每行包含两个整数x, y原创 2020-10-08 17:56:25 · 174 阅读 · 0 评论 -
【pta】社交集群 (30分)(并查集)
当你在社交网络平台注册时,一般总是被要求填写你的个人兴趣爱好,以便找到具有相同兴趣爱好的潜在的朋友。一个“社交集群”是指部分兴趣爱好相同的人的集合。你需要找出所有的社交集群。输入格式:输入在第一行给出一个正整数 N(≤1000),为社交网络平台注册的所有用户的人数。于是这些人从 1 到 N 编号。随后 N 行,每行按以下格式给出一个人的兴趣爱好列表:Ki: h[1] h[2] … h[Ki]其中K (>0)是兴趣爱好的个数,hi [j]是第j个兴趣爱好的编号,为区间 [1, 1000原创 2020-10-05 11:28:53 · 778 阅读 · 0 评论 -
进阶实验8-2.1 逆散列问题 (30分)
进阶实验8-2.1 逆散列问题 (30分)给定长度为 N 的散列表,处理整数最常用的散列映射是 H(x)=x%N。如果我们决定用线性探测解决冲突问题,则给定一个顺序输入的整数序列后,我们可以很容易得到这些整数在散列表中的分布。例如我们将 1、2、3 顺序插入长度为 3 的散列表HT[]后,将得到HT[0]=3,HT[1]=1,HT[2]=2的结果。但是现在要求解决的是“逆散列问题”,即给定整数在散列表中的分布,问这些整数是按什么顺序插入的?输入格式:输入的第一行是正整数 N(≤1000),为散列表的原创 2020-10-01 17:36:52 · 1673 阅读 · 0 评论 -
试题 历届试题 城市建设
问题描述 栋栋居住在一个繁华的C市中,然而,这个城市的道路大都年久失修。市长准备重新修一些路以方便市民,于是找到了栋栋,希望栋栋能帮助他。C市中有n个比较重要的地点,市长希望这些地点重点被考虑。现在可以修一些道路来连接其中的一些地点,每条道路可以连接其中的两个地点。另外由于C市有一条河从中穿过,也可以在其中的一些地点建设码头,所有建了码头的地点可以通过河道连接。栋栋拿到了允许建设的道路的信息,包括每条可以建设的道路的花费,以及哪些地点可以建设码头和建设码头的花费。市长希望栋栋给出一个方案,使得任意原创 2020-09-29 19:59:57 · 238 阅读 · 0 评论 -
7-27 家谱处理 (30分)
7-27 家谱处理 (30分)人类学研究对于家族很感兴趣,于是研究人员搜集了一些家族的家谱进行研究。实验中,使用计算机处理家谱。为了实现这个目的,研究人员将家谱转换为文本文件。下面为家谱文本文件的实例:John Robert Frank Andrew Nancy David家谱文本文件中,每一行包含一个人的名字。第一行中的名字是这个家族最早的祖先。家谱仅包含最早祖先的后代,而他们的丈夫或妻子不出现在家谱中。每个人的子女比父母多缩进2个空格。以上述家谱文本文件为例,Jo原创 2020-09-28 15:30:19 · 331 阅读 · 0 评论 -
树的同构 (25分)
7-3 树的同构 (25分)给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1图2现给定两棵树,请你判断它们是否是同构的。输入格式:输入给出2棵二叉树树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤10),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第i行对应编号第i个结点,给出该结点中存储的1个原创 2020-09-24 18:09:24 · 361 阅读 · 0 评论 -
【牛客】B 烦人的依赖(拓扑排序求顺序)
链接:https://ac.nowcoder.com/acm/contest/5678/B来源:牛客网题目描述Ubuntu20.04 正式发布了,ZLS 是一个作死小能手,于是他决定尝试一下这个船新版本。好不容易装完系统,ZLS 想要给他的系统装一些常用的软件。众所周知,在 Linux 装软件会遇到各种奇奇怪怪的依赖问题(所谓依赖问题就是若A依赖B,则B要先与A安装)。ZLS 对此不厌其烦,因此他想知道他要用什么顺序安装软件,可以一次安装成功呢?Tips: ZLS 还有一个癖好,他喜欢先安装字典序小原创 2020-05-25 16:23:37 · 309 阅读 · 0 评论 -
P1886 滑动窗口 /【模板】单调队列
【洛谷P1886】滑动窗口【单调队列】题目描述有一个长为 nn 的序列 aa,以及一个大小为 kk 的窗口。现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值。例如:The array is [1,3,-1,-3,5,3,6,7][1,3,−1,−3,5,3,6,7], and k = 3k=3。输入格式输入一共有两行,第一行有两个正整数 n,kn,k...原创 2020-05-08 09:47:57 · 1207 阅读 · 0 评论 -
P1967 货车运输(最短路+lca)
P1967 货车运输题目描述A 国有 nn 座城市,编号从 11 到 nn,城市之间有 mm 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 qq 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。输入格式第一行有两个用一个空格隔开的整数 n,mn,m,表示 AA 国有 nn 座城市和 mm 条道路。接下来 mm 行每行三个整数 x, y,...原创 2020-03-06 11:10:44 · 241 阅读 · 0 评论 -
P3379 【模板】最近公共祖先(LCA)
P3379 【模板】最近公共祖先(LCA)题目描述如题,给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先。输入格式第一行包含三个正整数 N,M,SN,M,S,分别表示树的结点个数、询问的个数和树根结点的序号。接下来 N-1N−1 行每行包含两个正整数 x, yx,y,表示 xx 结点和 yy 结点之间有一条直接连接的边(数据保证可以构成树)。接下来 MM 行每行包含两个正整数 a...原创 2020-03-04 11:20:52 · 464 阅读 · 0 评论 -
P4017 最大食物链计数(拓扑排序)
P4017 最大食物链计数题目背景你知道食物链吗?Delia 生物考试的时候,数食物链条数的题目全都错了,因为她总是重复数了几条或漏掉了几条。于是她来就来求助你,然而你也不会啊!写一个程序来帮帮她吧。题目描述给你一个食物网,你要求出这个食物网中最大食物链的数量。(这里的“最大食物链”,指的是生物学意义上的食物链,即最左端是不会捕食其他生物的生产者,最右端是不会被其他生物捕食的消费者。)...原创 2020-02-13 17:14:28 · 302 阅读 · 0 评论 -
堆优化的dijskra 最短路模板
P4779 【模板】单源最短路径(标准版)贴个模板吧,非负权图最优化的dijskra比spfa快。#include<cstdio> #include<queue>#include<cstring>using namespace std;const int maxn=500005;int inf=0x3f3f3f3f;int n,m,head[ma...原创 2020-02-11 16:20:37 · 440 阅读 · 0 评论 -
P1197 [JSOI2008]星球大战&P3144关闭农场(并查集逆序求连通块)
题目描述很久以前,在一个遥远的星系,一个黑暗的帝国靠着它的超级武器统治着整个星系。某一天,凭着一个偶然的机遇,一支反抗军摧毁了帝国的超级武器,并攻下了星系中几乎所有的星球。这些星球通过特殊的以太隧道互相直接或间接地连接。但好景不长,很快帝国又重新造出了他的超级武器。凭借这超级武器的力量,帝国开始有计划地摧毁反抗军占领的星球。由于星球的不断被摧毁,两个星球之间的通讯通道也开始不可靠起来。现在...原创 2020-02-11 11:11:37 · 196 阅读 · 0 评论 -
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm(有环图的搜索)
P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm题目描述Every year in Wisconsin the cows celebrate the USA autumn holiday of Halloween by dressing up in costumes and collecting candy that Farmer John ...原创 2020-02-09 11:54:00 · 180 阅读 · 0 评论 -
L3-005 垃圾箱分布 (30分)(最短路)
L3-005 垃圾箱分布 (30分)大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁都不愿意守着垃圾箱住。所以垃圾箱的位置必须选在到所有居民点的最短距离最长的地方,同时还要保证每个居民点都在距离它一个不太远的范围内。现给定一个居民区的地图,以及若干垃圾箱的候选地点,请你推荐最合适的地点。如果解不唯一,则输出到所有居民点的平均距离最短的那个解。如果这样的解还是不唯一,则输出编号最小的地点。...原创 2020-02-05 14:03:04 · 495 阅读 · 9 评论 -
P1341 无序字母对&7-32 哥尼斯堡的“七桥问题” (25分)(欧拉回路)
P1341 无序字母对题目描述给定n个各不相同的无序字母对(区分大小写,无序即字母对中的两个字母可以位置颠倒)。请构造一个有n+1个字母的字符串使得每个字母对都在这个字符串中出现。输入格式第一行输入一个正整数n。以下n行每行两个字母,表示这两个字母需要相邻。输出格式输出满足要求的字符串。如果没有满足要求的字符串,请输出“No Solution”。如果有多种方案,请输出前面的字母的...原创 2020-02-04 10:35:06 · 423 阅读 · 0 评论 -
P1144 最短路计数
P1144 最短路计数题目描述给出一个NN个顶点MM条边的无向无权图,顶点编号为1-N1−N。问从顶点11开始,到其他每个点的最短路有几条。输入格式第一行包含22个正整数N,MN,M,为图的顶点数与边数。接下来MM行,每行22个正整数x,yx,y,表示有一条顶点xx连向顶点yy的边,请注意可能有自环与重边。输出格式共NN行,每行一个非负整数,第ii行输出从顶点11到顶点ii有多少条不...原创 2020-02-02 09:44:16 · 465 阅读 · 0 评论 -
P6037 Ryoku 的探索&P2661 信息传递(拓扑排序求环)
P6033 Ryoku 的探索题目描述Ryoku 所处的世界可以抽象成一个有 nn 个点, nn 条边的带权无向连通图 GG。每条边有美观度和长度。Ryoku 会使用这样一个策略探索世界:在每个点寻找一个端点她未走过的边中美观度最高的走,如果没有边走,就沿着她前往这个点的边返回,类似于图的深度优先遍历。探索的一个方案的长度是这个方案所经过的所有边长度的和(返回时经过的长度不用计算)。她想...原创 2020-02-01 11:44:16 · 280 阅读 · 0 评论 -
P2341 【模板】强连通分量 / [HAOI2006]受欢迎的牛
P2341 【模板】强连通分量 / [HAOI2006]受欢迎的牛题目描述每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂,每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 AA 喜欢 BB,BB 喜欢 CC,那么 AA 也喜欢 CC。牛栏里共有 NN 头奶牛,给定一些奶牛之间的爱慕关系,请你算出有多少头奶牛可以当明星。输入格式第一行:...原创 2020-01-23 14:36:47 · 149 阅读 · 0 评论