![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构
文章平均质量分 53
亮子i_12138
这个作者很懒,什么都没留下…
展开
-
数据结构 快速排序
#include <iostream>#include <stdlib.h>using namespace std;typedef struct { int *data; int length;}SqList;SqList* InitList(int N){ SqList *L = (SqList*)malloc(sizeof(SqList)); L->data = (int*)malloc(sizeof(int)*(N+1).原创 2022-01-23 11:30:39 · 328 阅读 · 0 评论 -
数据结构 直接插入排序
#include <iostream>#include <stdlib.h>using namespace std;typedef struct { int *r; int length;}SqList;SqList* InitSqList(int N){ SqList *L = (SqList*)malloc(sizeof(SqList)); L->r = (int*)malloc(sizeof(int)*(N+1)); .原创 2022-01-23 11:29:16 · 347 阅读 · 0 评论 -
数据结构 堆排序
堆与堆排序 【对下面视频的总结】https://blog.csdn.net/Appleeatingboy/article/details/119607212?spm=1001.2014.3001.5501堆排序 【代码有问题?】https://www.bilibili.com/video/BV1Eb41147dK?spm_id_from=333.999.0.0#include <iostream>using namespace std;void Heapfi(int heap[.原创 2022-01-22 20:50:42 · 673 阅读 · 0 评论 -
7-2 二叉搜索树的删除操作
给出一棵二叉搜索树(没有相同元素), 请输出其删除部分元素之后的层序遍历序列。删除结点的策略如下:如果一个结点是叶子结点,则直接删除; 如果一个结点的左子树不为空, 则将该结点的值设置为其左子树上各结点中的最大值,并继续删除其左子树上拥有最大值的结点; 如果一个结点的左子树为空但右子树不为空,则将该结点的值设置为其右子树上各结点中的最小值,并继续删除其右子树上拥有最小值的结点。输入格式:每个输入文件包含一个测试用例。每个测试用例的第一行包含一个整数N(0<N<=100),表..原创 2022-01-21 20:21:07 · 1348 阅读 · 1 评论 -
7-1 建立二叉搜索树并查找父结点
按输入顺序建立二叉搜索树,并搜索某一结点,输出其父结点。输入格式:输入有三行: 第一行是n值,表示有n个结点; 第二行有n个整数,分别代表n个结点的数据值; 第三行是x,表示要搜索值为x的结点的父结点。输出格式:输出值为x的结点的父结点的值。 若值为x的结点不存在,则输出:It does not exist. 若值为x的结点是根结点,则输出:It doesn't have parent.输入样例:2203020输出样例:It doesn't have parent原创 2022-01-21 19:19:53 · 1882 阅读 · 0 评论 -
7-45 航空公司VIP客户查询 【哈希表 链地址法】
不少航空公司都会提供优惠的会员服务,当某顾客飞行里程累积达到一定数量后,可以使用里程积分直接兑换奖励机票或奖励升舱等服务。现给定某航空公司全体会员的飞行记录,要求实现根据身份证号码快速查询会员里程积分的功能。输入格式:输入首先给出两个正整数N(≤105)和K(≤500)。其中K是最低里程,即为照顾乘坐短程航班的会员,航空公司还会将航程低于K公里的航班也按K公里累积。随后N行,每行给出一条飞行记录。飞行记录的输入格式为:18位身份证号码(空格)飞行里程。其中身份证号码由17位数字加最后一位校验码组成,原创 2022-01-21 18:44:47 · 324 阅读 · 0 评论 -
7-4 二叉搜索树的最近公共祖先 【题目解析】
给定一棵二叉搜索树的先序遍历序列,要求你找出任意两结点的最近公共祖先结点(简称 LCA)。输入格式:输入的第一行给出两个正整数:待查询的结点对数 M(≤1 000)和二叉搜索树中结点个数 N(≤10 000)。随后一行给出 N 个不同的整数,为二叉搜索树的先序遍历序列。最后 M 行,每行给出一对整数键值 U 和 V。所有键值都在整型int范围内。输出格式:对每一对给定的 U 和 V,如果找到A是它们的最近公共祖先结点的键值,则在一行中输出LCA of U and V is A.。但...原创 2022-01-21 14:12:07 · 1674 阅读 · 0 评论 -
7-2 家庭房产
给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数、人均房产面积及房产套数。输入格式:输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产:编号 父 母 k 孩子1 ... 孩子k 房产套数 总面积其中编号是每个人独有的一个4位数的编号;父和母分别是该编号对应的这个人的父母的编号(如果已经过世,则显示-1);k(0≤k≤5)是该人的子女的个数;孩子i是其子女的编号。输出格式:首先在第一行输出家庭个数(所有有亲属关系的人都属于同一个家庭原创 2022-01-20 18:15:16 · 721 阅读 · 0 评论 -
图 【并查集】 个人学习记录
【算法】并查集(Disjoint Set)[共3讲]https://www.bilibili.com/video/BV13t411v7Fs?p=1代码规范:#include <iostream>using namespace std;#define MAXN 20001int parent[MAXN];int Rank[MAXN];void init(int n){ for(int i=0;i<n;i++) { parent[i].原创 2022-01-20 18:09:28 · 46 阅读 · 0 评论 -
7-7 六度空间 PTA(图的广度优先遍历)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信原创 2022-01-17 12:54:17 · 235 阅读 · 0 评论 -
7-4 关键活动 (拓扑序列+关键路径)代码知识点详解
假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则不可以同时开设,因为它们有先后的依赖关系,比如C程序设计和数据结构两门课,必须先学习前者。但是需要注意的是,对一组子任务,并不是任意的任务调度都是一原创 2022-01-16 19:48:56 · 650 阅读 · 0 评论 -
7-3 最短工期 (拓扑排序+关键路径) 代码详解
一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。输入格式:首先第一行给出两个正整数:项目里程碑的数量 N(≤100)和任务总数 M。这里的里程碑从 0 到 N−1 编号。随后 M 行,每行给出一项任务的描述,格式为“任务起始里程碑 任务结束里程碑 工作时长”,三个数字均为非负整数,以空格分隔。输出格式:如果整个项目的安排是合理可行的,在原创 2022-01-16 19:10:41 · 1728 阅读 · 0 评论 -
7-2 公路村村通 迪杰斯特拉(dijkstra)算法
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:6 151 2 51 3 31 4原创 2022-01-15 21:52:01 · 333 阅读 · 0 评论 -
7-2 公路村村通 普里姆(Prime)算法
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:6 151 2 51 3 31 4原创 2022-01-15 19:12:29 · 220 阅读 · 0 评论 -
《数据结构》 图的创建与遍历 代码表示
测试数据:10 15 //共10个顶点,15条边0 1 08 0 0 //第一、二个数表示连接两个顶点的起始顶点。第三个数1表示单通行,0表示双向通行4 8 15 4 05 9 10 6 07 3 18 3 12 5 02 1 11 5 01 4 09 7 13 1 06 3 1完整代码:#include <iostream>#include <stdlib.h>#include <queue>using names原创 2022-01-15 13:44:38 · 583 阅读 · 0 评论 -
7-1 哈夫曼编码(实验) 最全代码解析
给定一段文字,如果我们统计出字母出现的频率,是可以根据哈夫曼算法给出一套编码,使得用此编码压缩原文可以得到最短的编码总长。然而哈夫曼编码并不是唯一的。例如对字符串"aaaxuaxz",容易得到字母 'a'、'x'、'u'、'z' 的出现频率对应为 4、2、1、1。我们可以设计编码 {'a'=0, 'x'=10, 'u'=110, 'z'=111},也可以用另一套 {'a'=1, 'x'=01, 'u'=001, 'z'=000},还可以用 {'a'=0, 'x'=11, 'u'=100, 'z'=101},原创 2022-01-14 11:13:29 · 4505 阅读 · 3 评论 -
7-4 列出叶结点
对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。输入格式:首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。输出格式:在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。输入样例:81 -- -0 -2 7- -- -5 -4 6输出样例:原创 2022-01-12 17:12:32 · 579 阅读 · 0 评论 -
7-3 玩转二叉树
给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:71 2 3 4 5 6 74 1 3 2 6 5 7输出样原创 2022-01-12 14:17:22 · 524 阅读 · 0 评论 -
7-2 树的遍历
给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。这里假设键值都是互不相等的正整数。输入格式:输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其后序遍历序列。第三行给出其中序遍历序列。数字间以空格分隔。输出格式:在一行中输出该树的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:4 1 6 3 5 7 2代码段:本题是二叉树的层序遍历,建议原创 2022-01-12 14:00:19 · 262 阅读 · 0 评论 -
7-1 根据后序和中序遍历输出先序遍历
本题要求根据给定的一棵二叉树的后序遍历和中序遍历结果,输出该树的先序遍历结果。输入格式:第一行给出正整数N(≤30),是树中结点的个数。随后两行,每行给出N个整数,分别对应后序遍历和中序遍历结果,数字间以空格分隔。题目保证输入正确对应一棵二叉树。输出格式:在一行中输出Preorder: 以及该树的先序遍历结果。数字间有1个空格,行末不得有多余空格。输入样例:72 3 1 5 7 6 41 2 3 4 5 6 7输出样例:Preorder: 4 1 3 2 6 5 7原创 2022-01-12 13:37:08 · 662 阅读 · 0 评论 -
7-2 银行业务队列简单模拟
设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。输入格式:输入为一行正整数,其中第1个数字N(≤1000)为顾客总数,后面跟着N位顾客的编号。编号为奇数的顾客需要到A窗口办理业务,为偶数的顾客则去B窗口。数字间以空格分隔。输出格式:按业务处理完成的顺序原创 2022-01-11 12:27:14 · 334 阅读 · 0 评论 -
7-1 列车厢调度
1 ====== <--移动方向 / 3 ===== \ 2 ====== -->移动方向 大家或许在某些数据结构教材上见到过“列车厢调度问题”(当然没见过也不要紧)。今天,我们就来实际操作一下列车厢的调度。对照上方的ASCII字符图,问题描述如下:有三条平行的列车轨道(1、2、3)以及1-3和2-3两段连接轨道。现有一列车厢停在1号轨道上,请利用两条连接轨道以及3号轨道,将车厢按照要求的顺序转移到...原创 2022-01-11 11:55:07 · 161 阅读 · 0 评论 -
7-1 稀疏矩阵加法 PTA
给定两个矩阵A和B,求其和矩阵C=A+B。输入格式:第一行包含两个数Row和Col,分别表示矩阵的行数和列数,A和B的维度是一致的。第二行只有一个数N1,表示接下来要输入的A中的非零元素的个数。接下来是N1行,每一行都是i j A[i,j] 这样的形式,表示的A中第i行第j列的元素A[i,j],为了与大多数编程语言保持一致,它们都是从零开始的,也就是说下标的有效范围是[0,Row−1]×[0,Col−1]。在N1行之后,是一个数N2,表示矩阵B中非零元素的数量,此后N2行描述B原创 2022-01-07 13:51:03 · 1005 阅读 · 0 评论 -
7-2 三元组顺序表表示的稀疏矩阵转置运算Ⅰ
三元组顺序表表示的稀疏矩阵转置。输入格式:输入第1行为矩阵行数m、列数n及非零元素个数t。 按行优先顺序依次输入t行,每行3个数,分别表示非零元素的行标、列标和值。输出格式:输出转置后的三元组顺序表结果,每行输出非零元素的行标、列标和值,行标、列标和值之间用空格分隔,共t行。输入样例1:3 4 30 1 -51 0 12 2 2输出样例1:0 1 11 0 -52 2 2完整代码:#include <iostream>#inclu..原创 2022-01-07 13:24:44 · 1459 阅读 · 1 评论 -
7-1 约瑟夫环 (含实验报告)
N个人围成一圈顺序编号,从1号开始按1、2、3......顺序报数,报p者退出圈外,其余的人再从1、2、3开始报数,报p的人再退出圈外,以此类推。 请按退出顺序输出每个退出人的原序号。输入格式:输入只有一行,包括一个整数N(1<=N<=3000)及一个整数p(1<=p<=5000)。输出格式:按退出顺序输出每个退出人的原序号,数据间以一个空格分隔,但行尾无空格。样例">输入样例:在这里给出一组输入。例如:7 3输出样例:3 6 2 7 5原创 2022-01-06 19:12:53 · 3670 阅读 · 1 评论 -
7-1 串的模式匹配(kmp算法) 知识点+练习
给定两个由英文字母组成的字符串 String 和 Pattern,要求找到 Pattern 在 String 中第一次出现的位置,并将此位置后的 String 的子串输出。如果找不到,则输出“Not Found”。本题旨在测试各种不同的匹配算法在各种数据情况下的表现。各组测试数据特点如下:数据0:小规模字符串,测试基本正确性; 数据1:随机数据,String 长度为105,Pattern 长度为10; 数据2:随机数据,String 长度为105,Pattern 长度为102; 数据3...原创 2022-01-06 18:22:24 · 1400 阅读 · 1 评论 -
7-4 括号匹配 PTA
给定一串字符,不超过100个字符,可能包括括号、数字、字母、标点符号、空格,编程检查这一串字符中的( ) ,[ ],{ }是否匹配。输入格式:输入在一行中给出一行字符串,不超过100个字符,可能包括括号、数字、字母、标点符号、空格。输出格式:如果括号配对,输出yes,否则输出no。输入样例1:sin(10+20)输出样例1:yes输入样例2:{[}]输出样例2:no代码实现:#include <iostream>#.原创 2022-01-05 12:57:24 · 1494 阅读 · 1 评论 -
7-3 表达式转换 PTA
算术表达式有前缀表示法、中缀表示法和后缀表示法等形式。日常使用的算术表达式是采用中缀表示法,即二元运算符位于两个运算数中间。请设计程序将中缀表达式转换为后缀表达式。输入格式:输入在一行中给出不含空格的中缀表达式,可包含+、-、*、\以及左右括号(),表达式不超过20个字符。输出格式:在一行中输出转换后的后缀表达式,要求不同对象(运算数、运算符号)之间以空格分隔,但结尾不得有多余空格。输入样例:2+3*(7-4)+8/4输出样例:2 3 7 4 - * + 8 4 / .原创 2022-01-05 12:25:52 · 1084 阅读 · 0 评论 -
7-1 回文判断 PTA
回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。编写一个程序,使用栈判定给定的字符序列是否为回文。输入格式:输入待判断的字符序列,按回车键结束,字符序列长度<20。输出格式:若字符序列是回文,输出“YES”;否则,输出“NO”。输入样例:abdba输出样例:YES利用c++内的stack来实现回文判断:#include <iostream>#include <stack>.原创 2022-01-05 11:19:46 · 1907 阅读 · 0 评论 -
7-4 在有序链表中插入数据 PTA
给定一批严格递增排列的整型数据,给定一个x,若x不存在,则插入x,要求插入后保持有序。存在则无需任何操作。输入格式:输入有两行: 第一个数是n值,表示链表中有n个数据。后面有n个数,分别代表n个数据。 第二行是要插入的数。输出格式:输出插入后的链表数据,以空格分开。行末不能有多余的空格。输入样例1:在这里给出一组输入。例如:5 1 3 6 9 114输出样例1:在这里给出相应的输出。例如:1 3 4 6 9 11输入样例2:在这里给出一组输入。.原创 2022-01-04 16:38:49 · 5388 阅读 · 0 评论 -
7-3 两个有序链表序列的合并 PTA
已知两个非降序链表序列S1与S2,设计函数构造出S1与S2合并后的新的非降序链表S3。输入格式:输入分两行,分别在每行给出由若干个正整数构成的非降序序列,用−1表示序列的结尾(−1不属于这个序列)。数字用空格间隔。输出格式:在一行中输出合并后新的非降序链表,数字间用空格分开,结尾不能有多余空格;若新链表为空,输出NULL。输入样例:1 3 5 -12 4 6 8 10 -1输出样例:1 2 3 4 5 6 8 10#include <iostre原创 2022-01-04 14:36:44 · 1501 阅读 · 0 评论 -
7-2 求集合交集
求整数集合A与整数集合B的交集。输入格式:输入有三行:第一行是A和B的元素个数m和n(m,n <=100);第二行是集合A的m个元素;第三行是集合B的n个元素。输出格式:输出交集的所有元素(按照在A集合出现的顺序输出,最后一个输出后面没有空格)。 若交集为空,输出“NULL”。输入样例:在这里给出一组输入。例如:3 410 9 29 10 8 0输出样例:在这里给出相应的输出。例如:10 9#include <iostr.原创 2022-01-04 11:09:42 · 1679 阅读 · 0 评论 -
7-1 顺序表的建立及遍历 PTA
读入n值及n个整数,建立顺序表并遍历输出。输入格式:读入n及n个整数输出格式:输出n个整数,以空格分隔(最后一个数的后面没有空格)。样例">输入样例:在这里给出一组输入。例如:4-3 10 20 78输出样例:在这里给出相应的输出。例如:-3 10 20 78#include <iostream>#include <stdlib.h>using namespace std;#define MAXSIZE 20type原创 2022-01-04 10:52:38 · 3146 阅读 · 0 评论