
数据结构作业
永夜莫明
菜是原罪
展开
-
基于二叉树的表达式求值算法
#include<bits/stdc++.h>using namespace std;const int N=1e6+5;char s[N];bool judge(char c){ //判断是不是数字 return c>='0'&&c<='9';}struct node{ char c; int num; no...原创 2019-05-31 16:50:35 · 4261 阅读 · 1 评论 -
排座位 (25 分)
7-40 排座位 (25 分)布置宴席最微妙的事情,就是给前来参宴的各位宾客安排座位。无论如何,总不能把两个死对头排到同一张宴会桌旁!这个艰巨任务现在就交给你,对任何一对客人,请编写程序告诉主人他们是否能被安排同席。输入格式:输入第一行给出3个正整数:N(≤100),即前来参宴的宾客总人数,则这些人从1到N编号;M为已知两两宾客之间的关系数;K为查询的条数。随后M行,每行给出一对宾客之...原创 2018-12-29 20:11:13 · 149 阅读 · 0 评论 -
列出连通集 (25 分)
7-39 列出连通集 (25 分)给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"...原创 2018-12-29 19:43:28 · 957 阅读 · 0 评论 -
功夫传人 (25 分)
7-42 功夫传人 (25 分)一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱…… 直到某一支的某一代突然出现一个天分特别高的弟子(或者是吃到了灵丹、挖到了特别的秘笈),会将功夫的威力一下子放大N倍 —— 我们称这种弟子为“得道者”。这里我们来考察某一位祖师爷门下的徒子徒孙家谱:假设家谱中的每个人只有1位师傅(除...原创 2018-12-29 19:15:12 · 223 阅读 · 0 评论 -
7-41 红色警报 (25 分)(并查集暴力)
7-41 红色警报 (25 分)战争中保持各个城市间的连通性非常重要。本题要求你编写一个报警程序,当失去一个城市导致国家被分裂为多个无法连通的区域时,就发出红色警报。注意:若该国本来就不完全连通,是分裂的k个区域,而失去一个城市并不改变其他城市之间的连通性,则不要发出警报。输入格式:输入在第一行给出两个整数N(0 < N ≤ 500)和M(≤ 5000),分别为城市个数(于是默认城市从...原创 2018-12-23 21:31:15 · 240 阅读 · 0 评论 -
7-37 城市间紧急救援 (25 分)(多权值最短路)(最优最短路路径,最短路条数)(Dijkstra)
7-37 城市间紧急救援 (25 分)作为一个城市的应急救援队伍的负责人,你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候,你的任务是带领你的救援队尽快赶往事发地,同时,一路上召集尽可能多的救援队。输入格式:输入第一行给出4个正整数N、M、S、D,其中N(2≤N...原创 2018-12-22 01:43:14 · 232 阅读 · 0 评论 -
哥尼斯堡的“七桥问题”(欧拉回路)
7-12 哥尼斯堡的“七桥问题” (25 分)哥尼斯堡是位于普累格河上的一座城市,它包含两个岛屿及连接它们的七座桥,如下图所示。可否走过这样的七座桥,而且每桥只走过一次?瑞士数学家欧拉(Leonhard Euler,1707—1783)最终解决了这个问题,并由此创立了拓扑学。这个问题如今可以描述为判断欧拉回路是否存在的问题。欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的...原创 2018-12-17 09:41:46 · 808 阅读 · 0 评论 -
7-14 拯救007 (25 分)(暴力)(并查集)
7-14 拯救007 (25 分)在老电影“007之生死关头”(Live and Let Die)中有一个情节,007被毒贩抓到一个鳄鱼池中心的小岛上,他用了一种极为大胆的方法逃脱 —— 直接踩着池子里一系列鳄鱼的大脑袋跳上岸去!(据说当年替身演员被最后一条鳄鱼咬住了脚,幸好穿的是特别加厚的靴子才逃过一劫。)设鳄鱼池是长宽为100米的方形,中心坐标为 (0, 0),且东北角坐标为 (50, 5...原创 2018-12-17 09:34:11 · 1708 阅读 · 0 评论 -
任务调度的合理性(拓扑排序裸题)
7-13 任务调度的合理性 (25 分)假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行。“任务调度”包括一组子任务、以及每个子任务可以执行所依赖的子任务集。比如完成一个专业的所有课程学习和毕业设计可以看成一个本科生要完成的一项工程,各门课程可以看成是子任务。有些课程可以同时开设,比如英语和C程序设计,它们没有必须先修哪门的约束;有些课程则...原创 2018-12-17 08:07:18 · 376 阅读 · 0 评论 -
图着色问题 (25 分)
7-38 图着色问题 (25 分)图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色?但本题并不是要你解决这个着色问题,而是对给定的一种颜色分配,请你判断这是否是图着色问题的一个解。输入格式:输入在第一行给出3个整数V(0<V≤500)、E(≥0)和K(0<K≤V),分别是无...原创 2018-12-29 20:39:38 · 695 阅读 · 0 评论 -
7-44 字符串的冒泡排序 (20 分)
7-44 字符串的冒泡排序 (20 分)我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。输入格式:输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。输出格式:输出冒泡排序法扫描完第K遍后的中间结...原创 2019-01-01 22:41:58 · 606 阅读 · 0 评论 -
7-47 抢红包 (25 分)
7-47 抢红包 (25 分)没有人没抢过红包吧…… 这里给出N个人之间互相发红包、抢红包的记录,请你统计一下他们抢红包的收获。输入格式:输入第一行给出一个正整数N(≤104),即参与发红包和抢红包的总人数,则这些人从1到N编号。随后N行,第i行给出编号为i的人发红包的记录,格式如下:KN1P1⋯NKPK其中K(0≤K≤20)是发出去的红包个...原创 2019-01-03 11:22:24 · 729 阅读 · 0 评论 -
链式表操作集
链式表操作集(20分)本题要求实现链式表的操作集。函数接口定义:Position Find( List L, ElementType X );List Insert( List L, ElementType X, Position P );List Delete( List L, Position P );其中List结构定义如下:typedef stru...原创 2019-03-25 21:18:28 · 256 阅读 · 0 评论 -
带头结点的链式表操作集
带头结点的链式表操作集(20分)本题要求实现带头结点的链式表操作集。函数接口定义:List MakeEmpty(); Position Find( List L, ElementType X );bool Insert( List L, ElementType X, Position P );bool Delete( List L, Position P );其中L...原创 2019-03-25 21:17:09 · 450 阅读 · 0 评论 -
求链式表的表长
求链式表的表长(10分)本题要求实现一个函数,求链式表的表长。函数接口定义:int Length( List L );其中List结构定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; PtrToLNode Next;};typedef PtrToLNode...原创 2019-03-25 21:16:09 · 502 阅读 · 0 评论 -
单链表逆转
单链表逆转(20分)本题要求实现一个函数,将给定的单链表逆转。函数接口定义:List Reverse( List L );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一...原创 2019-03-25 21:15:16 · 232 阅读 · 0 评论 -
尾插法创建单链表(C)
尾插法创建单链表(C)(25分)本题要求实现两个函数,输入n个数据,采用尾插法创建单链表并打印。例如:如果输入4 ,再输入3 7 9 5,则应打印输出3 7 9 5。链表结点结构定义:struct Node { //链表结点 int data; //数据 struct Node* link; //指向下一个结点的指针};函数接口定义:...原创 2019-03-25 21:14:21 · 10983 阅读 · 0 评论 -
头插法创建单链表
头插法创建单链表(C)(25分)本题要求实现两个函数,输入n个数据,采用头插法创建单链表并打印。例如:如果输入4 ,再输入3 7 9 5,则应打印输出5 9 7 3。链表结点结构定义:struct Node { //链表结点 int data; //数据 struct Node* link; //指向下一个结点的指针};函数接口定义:...原创 2019-03-25 21:13:26 · 7084 阅读 · 0 评论 -
插入排序还是归并排序
插入排序还是归并排序 (25 分)根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。现给定原始序列和...原创 2019-01-09 20:52:24 · 1901 阅读 · 0 评论 -
插入排序还是堆排序
插入排序还是堆排序 (25 分)根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。堆排序也是将输入分为有序和无序两部分,迭代地从无序部分找出最大元素放入有序部分。它利用了大根堆的堆顶元素最大这一特征,使得在当前无序区中选取最大元素变得简单。现给定原始序列和...原创 2019-01-09 20:02:38 · 5061 阅读 · 1 评论 -
分离链接法的删除操作函数
6-23 分离链接法的删除操作函数 (20 分)试实现分离链接法的删除操作函数。函数接口定义:bool Delete( HashTable H, ElementType Key );其中HashTable是分离链接散列表,定义如下:typedef struct LNode *PtrToLNode;struct LNode { ElementType Data; Ptr...原创 2018-12-10 18:02:30 · 763 阅读 · 0 评论 -
7-36 旅游规划 (25 分)(多权值最短路)(Dijkstra)
7-36 旅游规划 (25 分)有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速...原创 2018-12-20 20:13:02 · 275 阅读 · 0 评论 -
整型关键字的散列映射
7-11 整型关键字的散列映射 (25 分)给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。输出格式:在一行内输出每个整型关键字在散列表中的位置。数字...原创 2018-12-10 08:25:32 · 931 阅读 · 0 评论 -
小字辈
小字辈 (25 分)本题给定一个庞大家族的家谱,要请你给出最小一辈的名单。输入格式:输入在第一行给出家族人口总数 N(不超过 100 000 的正整数) —— 简单起见,我们把家族成员从 1 到 N 编号。随后第二行给出 N 个编号,其中第 i 个编号对应第 i 位成员的父/母。家谱中辈分最高的老祖宗对应的父/母编号为 -1。一行中的数字间以空格分隔。输出格式:首先输出最小的辈分(老祖宗...原创 2018-11-26 08:50:35 · 1425 阅读 · 0 评论 -
搜索树判断
7-25 搜索树判断 (25 分)对于二叉搜索树,我们规定任一结点的左子树仅包含严格小于该结点的键值,而其右子树包含大于或等于该结点的键值。如果我们交换每个节点的左子树和右子树,得到的树叫做镜像二叉搜索树。现在我们给出一个整数键值序列,请编写程序判断该序列是否为某棵二叉搜索树或某镜像二叉搜索树的前序遍历序列,如果是,则输出对应二叉树的后序遍历序列。输入格式:输入的第一行包含一个正整数N(≤...原创 2018-11-20 21:33:53 · 782 阅读 · 0 评论 -
是否二叉搜索树
6-21 是否二叉搜索树 (25 分)本题要求实现函数,判断给定二叉树是否二叉搜索树。函数接口定义:bool IsBST ( BinTree T );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data; BinTr...原创 2018-11-20 19:47:27 · 4438 阅读 · 8 评论 -
二叉搜索树的操作集
6-20 二叉搜索树的操作集 (30 分)本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position Fi...原创 2018-11-20 17:19:16 · 285 阅读 · 0 评论 -
层序建立二叉链表 (20 分)
层序建立二叉链表 (20 分)本题要求实现一个函数,给定一棵二叉树的层序序列,创建该树的二叉链表。函数接口定义:BinTree CreatBinTree();函数CreatBinTree从标准输入读入一棵二叉树的层序序列,创建二叉树的二叉链表。函数应返回指向二叉链表根结点的指针。其中,二叉树结点的键值用字符表示,字符之间不含空格。空树用#表示。其中BinTree结构定义如下:type...原创 2018-11-01 21:04:16 · 774 阅读 · 0 评论 -
层序遍历二叉链表 (25 分)
层序遍历二叉链表 (25 分)设计程序,按先序创建二叉树的二叉链表;然后层序遍历二叉树。输入格式:按先序输入一棵二叉树。二叉树中每个结点的键值用字符表示,字符之间不含空格。注意空树信息也要提供,以#字符表示空树。输出格式:输出层序遍历二叉树的序列。序列中不含空格、不含#。输入样例:abc##d##e#f##输出样例:abecdf#include<cstdio>...原创 2018-10-31 21:27:12 · 3562 阅读 · 2 评论 -
先序输出叶结点 (15 分)
先序输出叶结点 (15 分)本题要求按照先序遍历的顺序输出给定二叉树的叶结点。函数接口定义:void PreorderPrintLeaves( BinTree BT );其中BinTree结构定义如下:typedef struct TNode *Position;typedef Position BinTree;struct TNode{ ElementType Data;...原创 2018-10-31 21:17:34 · 888 阅读 · 0 评论 -
玩转二叉链表 (20 分)
玩转二叉链表 (20 分)先序创建二叉树的二叉链表设计程序,按先序创建二叉树的二叉链表;然后先序、中序、后序遍历二叉树。输入格式:按先序输入一棵二叉树。二叉树中每个结点的键值用字符表示,字符之间不含空格。注意空树信息也要提供,以#字符表示空树。输出格式:输出3行。第一行是先序遍历二叉树的序列,第二行是中序遍历二叉树的序列,第三行是后序遍历二叉树的序列。每行首尾不得有多余空格。序列中不含...原创 2018-10-31 21:09:46 · 1374 阅读 · 0 评论 -
关于堆的判断
7-27 关于堆的判断 (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个正整...原创 2018-11-29 14:31:34 · 456 阅读 · 0 评论 -
平衡二叉树的根
7-29 平衡二叉树的根 (25 分)将给定的一系列数字插入初始为空的AVL树,请你输出最后生成的AVL树的根结点的值。输入格式:输入的第一行给出一个正整数N(≤20),随后一行给出N个不同的整数,其间以空格分隔。输出格式:在一行中输出顺序插入上述整数到一棵初始为空的AVL树后,该树的根结点的值。输入样例1:588 70 61 96 120输出样例1:70输入样例2:78...原创 2018-11-29 15:48:19 · 1029 阅读 · 0 评论 -
QQ帐户的申请与登陆
7-34 QQ帐户的申请与登陆 (25 分)实现QQ新帐户申请和老帐户登陆的简化版功能。最大挑战是:据说现在的QQ号码已经有10位数了。输入格式:输入首先给出一个正整数N(≤10^5),随后给出N行指令。每行指令的格式为:“命令符(空格)QQ号码(空格)密码”。其中命令符为“N”(代表New)时表示要新申请一个QQ号,后面是新帐户的号码和密码;命令符为“L”(代表Login)时表示是老帐户...原创 2018-12-07 16:29:42 · 259 阅读 · 0 评论 -
7-33 电话聊天狂人 (25 分)(map水题)
7-33 电话聊天狂人 (25 分)给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人。输入格式:输入首先给出正整数N(≤105 ),为通话记录条数。随后N行,每行给出一条通话记录。简单起见,这里只列出拨出方和接收方的11位数字构成的手机号码,其中以空格分隔。输出格式:在一行中给出聊天狂人的手机号码及其通话次数,其间以空格分隔。如果这样的人不唯一,则输出狂人中最小的号码及...原创 2018-12-07 16:00:44 · 456 阅读 · 0 评论 -
7-32 文件传输 (25 分) (并查集水题)
7-32 文件传输 (25 分)当两台计算机双向连通的时候,文件是可以在两台机器间传输的。给定一套计算机网络,请你判断任意两台指定的计算机之间能否传输文件?输入格式:首先在第一行给出网络中计算机的总数 N (2≤N≤104 ),于是我们假设这些计算机从 1 到 N 编号。随后每行输入按以下格式给出:I c1 c2其中I表示在计算机c1和c2之间加入连线,使它们连通;或者是C ...原创 2018-12-07 15:47:15 · 1348 阅读 · 0 评论 -
7-31 朋友圈 (25 分)
7-31 朋友圈 (25 分)某学校有N个学生,形成M个俱乐部。每个俱乐部里的学生有着一定相似的兴趣爱好,形成一个朋友圈。一个学生可以同时属于若干个不同的俱乐部。根据“我的朋友的朋友也是我的朋友”这个推论可以得出,如果A和B是朋友,且B和C是朋友,则A和C也是朋友。请编写程序计算最大朋友圈中有多少人。输入格式:输入的第一行包含两个正整数N(≤30000)和M(≤1000),分别代表学校的学生...原创 2018-12-07 15:31:58 · 300 阅读 · 0 评论 -
线性探测法的查找函数 (20 分)
6-22 线性探测法的查找函数 (20 分)试实现线性探测法的查找函数。函数接口定义:Position Find( HashTable H, ElementType Key );其中HashTable是开放地址散列表,定义如下:#define MAXTABLESIZE 100000 /* 允许开辟的最大散列表长度 */typedef int ElementType; /* ...原创 2018-12-07 14:57:18 · 13493 阅读 · 2 评论 -
词频统计(map+vector+sort排序)
7-35 词频统计 (30 分)请编写程序,对一段英文文本,统计其中所有不同单词的个数,以及词频最大的前10%的单词。所谓“单词”,是指由不超过80个单词字符组成的连续字符串,但长度超过15的单词将只截取保留前15个单词字符。而合法的“单词字符”为大小写字母、数字和下划线,其它字符均认为是单词分隔符。输入格式:输入给出一段非空文本,最后以符号#结尾。输入保证存在至少10个不同的单词。输出...原创 2018-12-07 17:23:33 · 942 阅读 · 0 评论 -
堆中的路径
7-9 堆中的路径 (25 分)将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下...原创 2018-12-03 09:16:36 · 321 阅读 · 0 评论