数据结构
一只努力的cs小白
这个作者很懒,什么都没留下…
展开
-
散列表是什么,你真的懂了吗?
首先有个指标即平均查找长度ASL用来度量散列表查找效率:成功查找、不成功查找。而且我们要对关键词的查找的同时,这还要取决于产生冲突的多少。而影响产生冲突的多少的因素有:(1)散列函数是够均匀:你构造的散列表不均匀,那么冲突就会变多,然后性能就会变差(2)处理冲突的方法(3)散列表的装填因子α因此我们需要分析不同的冲突处理方法和装填因子对效率的影响。1.线性探测法的查找性能有证明可得,线性探测法的期望探测发满足下列公式:线性探测法的实现代码如下:#include<stdio.h&g原创 2020-06-15 18:04:17 · 4304 阅读 · 3 评论 -
基础实验5-2.1 整型关键字的平方探测法散列 (25分)(C语言实现)(数据结构)
本题的任务很简单:将给定的无重复正整数序列插入一个散列表,输出每个输入的数字在表中的位置。所用的散列函数是 H(key)=key%TSize,其中 TSize 是散列表的表长。要求用平方探测法(只增不减,即H(Key)+i^2 )解决冲突。注意散列表的表长最好是个素数。如果输入给定的表长不是素数,你必须将表长重新定义为大于给定表长的最小素数。输入格式:首先第一行给出两个正整数 MSize(≤104 )N(≤MSize),分别对应输入的表长和输入数字的个数。随后第二行给出 N 个不重复的正整数,数字原创 2020-06-14 10:57:20 · 3676 阅读 · 0 评论 -
案例5-1.4 字符串关键字的散列映射 (25分)(数据结构)(C语言实现)
给定一系列由大写英文字母组成的字符串关键字和素数P,用移位法定义的散列函数H(Key)将关键字Key中的最后3个字符映射为整数,每个字符占5位;再用除留余数法将整数映射到长度为P的散列表中。例如将字符串AZDEG插入长度为1009的散列表中,我们首先将26个大写英文字母顺序映射到整数0~25;再通过移位将其映射为3×322 +4×32+6=3206;然后根据表长得到,即是该字符串的散列映射位置。发生冲突时请用平方探测法解决。输入格式:输入第一行首先给出两个正整数N(≤500)和P(≥2N的最原创 2020-06-13 22:07:55 · 2320 阅读 · 1 评论 -
案例5-1.3 整型关键字的散列映射 (25分)(C语言实现)(数据结构)
给定一系列整型关键字和素数P,用除留余数法定义的散列函数将关键字映射到长度为P的散列表中。用线性探测法解决冲突。输入格式:输入第一行首先给出两个正整数N(≤1000)和P(≥N的最小素数),分别为待插入的关键字总数、以及散列表的长度。第二行给出N个整型关键字。数字间以空格分隔。输出格式:在一行内输出每个整型关键字在散列表中的位置。数字间以空格分隔,但行末尾不得有多余空格。输入样例:4 524 15 61 88输出样例:4 0 1 3代码实现如下:...原创 2020-06-13 11:27:52 · 1256 阅读 · 0 评论 -
案例7-1.5Sort with Swap(0, i) or与零交换 (25分)(数据结构)(C语言实现)
将 { 0, 1, 2, …, N-1 } 的任意一个排列进行排序并不困难,这里加一点难度,要求你只能通过一系列的 Swap(0, *) —— 即将一个数字与 0 交换 —— 的操作,将初始序列增序排列。例如对于初始序列 { 4, 0, 2, 1, 3 },我们可以通过下列操作完成排序:Swap(0, 1) ⟹ { 4, 1, 2, 0, 3 }Swap(0, 3) ⟹ { 4, 1, 2, 3, 0 }Swap(0, 4) ⟹ { 0, 1, 2, 3, 4 }本题要求你找出将前 N 个非负整数的原创 2020-06-12 20:25:07 · 342 阅读 · 0 评论 -
案例7-1.2 插入排序还是归并排序 (25分)(数据结构)(C语言实现)
根据维基百科的定义:插入排序是迭代算法,逐一获得输入数据,逐步产生有序的输出序列。每步迭代中,算法从输入序列中取出一元素,将之插入有序序列中正确的位置。如此迭代直到全部元素有序。归并排序进行如下迭代操作:首先将原始序列看成 N 个只包含 1 个元素的有序子序列,然后每次迭代归并两个相邻的有序子序列,直到最后只剩下 1 个有序的序列。现给定原始序列和由某排序算法产生的中间序列,请你判断该算法究竟是哪种排序算法?输入格式:输入在第一行给出正整数 N (≤100);随后一行给出原始序列的 N 个整数;最原创 2020-06-08 22:40:04 · 1610 阅读 · 1 评论 -
基础实验6-2.6 最短工期 (25分)(C语言实现)(数据结构)
基础实验6-2.6 最短工期 (25分)一个项目由若干个任务组成,任务之间有先后依赖顺序。项目经理需要设置一系列里程碑,在每个里程碑节点处检查任务的完成情况,并启动后续的任务。现给定一个项目中各个任务之间的关系,请你计算出这个项目的最早完工时间。输入格式:首先第一行给出两个正整数:项目里程碑的数量 N(≤100)和任务总数 M。这里的里程碑从 0 到 N−1 编号。随后 M 行,每行给出一项任务的描述,格式为“任务起始里程碑 任务结束里程碑 工作时长”,三个数字均为非负整数,以空格分隔。输出格式:原创 2020-05-27 21:45:14 · 3480 阅读 · 2 评论 -
08-图7 公路村村通 (30分)(C语言实现)(数据结构)
现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本。输入格式:输入数据包括城镇数目正整数N(≤1000)和候选道路数目M(≤3N);随后的M行对应M条道路,每行给出3个正整数,分别是该条道路直接连通的两个城镇的编号以及该道路改建的预算成本。为简单起见,城镇从1到N编号。输出格式:输出村村通需要的最低成本。如果输入数据不足以保证畅通,则输出−1,表示需要建设更多公路。输入样例:6 151 2 51 3 31 4 71 5 4原创 2020-05-26 21:49:11 · 1535 阅读 · 0 评论 -
浙大pta07-图6 旅游规划 (25分)(数据结构)(C语言实现)很详细的解释
07-图6 旅游规划 (25分)有了一张自驾旅游路线图,你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序,帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的,那么需要输出最便宜的一条路径。输入格式:输入说明:输入数据的第1行给出4个正整数N、M、S、D,其中N(2≤N≤500)是城市的个数,顺便假设城市的编号为0~(N−1);M是高速公路的条数;S是出发地的城市编号;D是目的地的城市编号。随后的M行中,每行给出一条高速公路的信息,分别是:城市1原创 2020-05-23 22:49:35 · 1377 阅读 · 0 评论 -
07-图5 Saving James Bond - Hard Version (30分)(数据结构)(c语言)
This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with crocodiles. There he原创 2020-05-23 19:36:02 · 500 阅读 · 0 评论 -
06-图3 六度空间 (30分)(数据结构)(C语言实现)(邻接链表)
“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。图1 六度空间示意图“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,原创 2020-05-22 10:29:43 · 2604 阅读 · 0 评论 -
06-图2 Saving James Bond - Easy Version (25分)(数据结构)(C语言实现)
This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was captured by a group of drug dealers. He was sent to a small piece of land at the center of a lake filled with crocodiles. There he原创 2020-05-22 09:49:46 · 708 阅读 · 0 评论 -
列出图的连通集 (25分) (数据结构)(C语言实现)
给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集。假设顶点从0到N−1编号。进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序访问邻接点。输入格式:输入第1行给出2个整数N(0<N≤10)和E,分别是图的顶点数和边数。随后E行,每行给出一条边的两个端点。每行中的数字之间用1空格分隔。输出格式:按照"{ v1 v2 … vk }"的格式,每行输出一个连通集。先输出DFS的结果,再输出BFS的结果。输入样例:8 60原创 2020-05-21 17:57:32 · 976 阅读 · 0 评论 -
05-树9 Huffman Codes (30分)(数据结构)(C语言实现)(哈夫曼树)
05-树9 Huffman Codes (30分)In 1953, David A. Huffman published his paper “A Method for the Construction of Minimum-Redundancy Codes”, and hence printed his name in the history of computer science. As a professor who gives the final exam problem on Huffman c原创 2020-05-21 12:48:40 · 830 阅读 · 0 评论 -
05-树8 File Transfer (25分)(并查集的应用)(数据结构)(C语言实现)
We have a network of computers and a list of bi-directional connections. Each of these connections allows a file transfer from one computer to another. Is it possible to send a file from any computer on the network to any other?Input Specification:Each i原创 2020-05-21 11:43:27 · 204 阅读 · 0 评论 -
05-树7 堆中的路径 (25分)(数据结构)(C语言实现)(数据结构)
将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。输入格式:每组测试第1行包含2个正整数N和M(≤1000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的N个要被插入一个初始为空的小顶堆的整数。最后一行给出M个下标。输出格式:对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。输入样例:5 346 23 26 24 105 4 3原创 2020-05-20 19:17:38 · 2149 阅读 · 0 评论 -
04-树6 Complete Binary Search Tree (30分)(数据结构)(C语言实现)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than the node’s key.The right subtree of a node contains only nodes with keys greater than原创 2020-05-20 17:26:19 · 201 阅读 · 0 评论 -
04-树5 Root of AVL Tree (25分)(数据结构)(C语言实现)
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child subtrees of any node differ by at most one; if at any time they differ by more than one, rebalancing is done to restore this property. Figures 1-4 illustrate t原创 2020-05-19 21:32:42 · 843 阅读 · 0 评论 -
04-树4 是否同一棵二叉搜索树 (25分)(数据结构)(C语言实现)
给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的个数和需要检查的序列个数。第2行给出N个以空格分隔的正整数,作为初始插入序列。最后L行,每行给出N个插入的元素,属于L个需要检查原创 2020-05-19 21:07:24 · 559 阅读 · 0 评论 -
04-树7 二叉搜索树的操作集 (30分)(数据结构)(关于二叉搜索树的题目)
04-树7 二叉搜索树的操作集 (30分)本题要求实现给定二叉搜索树的5种常用操作。函数接口定义:BinTree Insert( BinTree BST, ElementType X );BinTree Delete( BinTree BST, ElementType X );Position Find( BinTree BST, ElementType X );Position FindMin( BinTree BST );Position FindMax( BinTree BST );其原创 2020-05-19 20:44:45 · 193 阅读 · 0 评论 -
03-树3 Tree Traversals Again (25分)(数据结构)(c语言实现)
An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example, suppose that when a 6-node binary tree (with the keys numbered from 1 to 6) is traversed, the stack operations are: push(1); push(2); push(3); pop(); pop(原创 2020-05-19 17:55:22 · 1095 阅读 · 1 评论 -
关于如何根据树的前序和中序遍历,或者是树的后序和中序遍历建立一颗二叉树
对于给定的一棵树来说,我们很容易知道这棵树的前序、中序、后序遍历。但是我们怎样才能通过给定的两种遍历来确定一棵树呢?对于这一棵树来说,假定我们不知道这棵树长啥样,我们知道了前序遍历和中序遍历。前序遍历就是|1|2|3|4|5|6|而中序遍历就是|3|2|4|1|6|5|首先我们需要确定根节点是什么很明显我们就能看得到根节点是1在中序遍历中我们以1为分界线发现1的左边是324我们就可以知道了左子树的中序遍历就是324再回看前序遍历 可以知道左子树的先序遍历就是234不断递归的推 我原创 2020-05-19 17:52:44 · 419 阅读 · 0 评论 -
03-树2 List Leaves (25分)(数据结构)(c语言实现)
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.Input Specification:Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number of node原创 2020-05-19 16:52:54 · 325 阅读 · 2 评论 -
03-树1 树的同构 (25分)(数据结构)(C语言实现)
这道题目主要是考大家对于树的理解,题目要求如果树的左儿子和另一颗树的右儿子相同,其他也相同,那么这两棵树也是同构的。给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。图1像这两棵树,左树的右子树和右树的左子树是相同的,其他部分也是一样,所以这两颗树是同构的.图2这两颗树就完全不一样了,所以判定不是同构树.现给定两棵树,请你判原创 2020-05-19 12:52:47 · 1106 阅读 · 1 评论 -
02-线性结构4 Pop Sequence (25分)(数据结构)(C语言实现)
Given a stack which can keep M numbers at most. Push N numbers in the order of 1, 2, 3, …, N and pop randomly. You are supposed to tell if a given sequence of numbers is a possible pop sequence of the stack. For example, if M is 5 and N is 7, we can obtain原创 2020-05-18 11:20:57 · 227 阅读 · 0 评论 -
02-线性结构2 一元多项式的乘法与加法运算 (20分)(数据结构)(C语言实现)
设计函数分别求两个一元多项式的乘积与和。输入格式:输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数)。数字间以空格分隔。输出格式:输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数。数字间以空格分隔,但结尾不能有多余空格。零多项式应输出0 0。输入样例:4 3 4 -5 2 6 1 -2 03 5 20 -7 4 3 1输出样例:15 24 -25 22 30 21 -10 20原创 2020-05-17 20:58:31 · 1286 阅读 · 4 评论 -
02-线性结构1 两个有序链表序列的合并 (15分)(数据结构)(C语言实现)
本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。函数接口定义:List Merge( List L1, List L2 );其中List结构定义如下:typedef struct Node *PtrToNode;struct Node { ElementType Data; /* 存储结点数据 */ PtrToNode Next; /* 指向下一个结点的指针 */};typedef PtrToNode List; /* 定义单链表类型 */原创 2020-05-17 12:28:42 · 811 阅读 · 0 评论 -
01-复杂度2 Maximum Subsequence Sum (25分)(数据结构)(C语言实现)
Given a sequence of K integers { N1 , N2 , …, NK }. A continuous subsequence is defined to be { Ni , Ni+1 , …, Nj } where 1≤i≤j≤K. The Maximum Subsequence is the continuous subsequence which has the largest sum of its elements. For example,原创 2020-05-17 12:13:16 · 247 阅读 · 0 评论 -
01-复杂度1 最大子列和问题 (20分)(C语言实现)
01-复杂度1 最大子列和问题 (20分)数据结构(浙江大学)给定K个整数组成的序列{ N1 , N2 , …, NK },“连续子列”被定义为{ Ni , Ni+1 , …, Nj },其中 1≤i≤j≤K。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。本题旨在测原创 2020-05-17 11:07:39 · 1858 阅读 · 1 评论 -
01-复杂度3 二分查找 (20分)(C语言实现)
对于大多数同学来说,二分算法是一个很普遍的查找方法,它能够很大程度的减少查找次数。下面我们就来用代码实现二分算法。二分查找实现一般用数组,而且这个数组一定要是按照顺序的,必须是从小到大排列,如果数组不是从小到大排列,我们可以先用代码进行排序,然后再进行二分查找。二分算法的中心思想是取中查找,每次查找减少一半的数,如果此时的数还是要比我们想要找的数大,那么我们就去它的右区间去查找;相反,如果小,我们就去它的左区间去查找。具体代码如下:int BinarySearch(List L,ElementTy原创 2020-05-16 21:11:46 · 598 阅读 · 0 评论 -
07-图4 哈利·波特的考试 (25分)(C语言实现)
07-图4 哈利·波特的考试 (25分)(C语言实现)数据结构(浙江大学)哈利·波特要考试了,他需要你的帮助。这门课学的是用魔咒将一种动物变成另一种动物的本事。例如将猫变成老鼠的魔咒是haha,将老鼠变成鱼的魔咒是hehe等等。反方向变化的魔咒就是简单地将原来的魔咒倒过来念,例如ahah可以将老鼠变成猫。另外,如果想把猫变成鱼,可以通过念一个直接魔咒lalala,也可以将猫变老鼠、老鼠变鱼的魔咒连起来念:hahahehe。现在哈利·波特的手里有一本教材,里面列出了所有的变形魔咒和能变的动物。老师允许他原创 2020-05-16 20:06:44 · 2558 阅读 · 0 评论