数据结构与算法设计
文章平均质量分 52
北理工数据结构与算法设计(2023秋双语班)编程+实验
榆榆欸
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
2. 套圈(分治)
扔圆环是一种游戏,玩家需要将平面圆环扔向一些玩具,所有被圆环围住的玩具都会得到奖励。在虚拟游戏场地中,每个玩具的位置是固定的,而圆环被精心设计,只能一次性围住一个玩具。如果一个点与圆环的中心之间的距离严格小于圆环的半径,那么该点就被圆环围住。对于每个案例,第一行包含一个整数N(2 <= N <= 100,000),表示场地中的玩具总数。接下来是N行,每行包含一个(x, y)对,表示一个玩具的坐标。输出 对于每个测试案例,以一行输出所需的虚拟游戏场地经理所需的圆环半径,精确到小数点后两位。原创 2023-12-17 12:28:02 · 506 阅读 · 1 评论 -
2. 皇后的控制力
我们对八皇后问题进行扩展。国际象棋中的皇后非常神勇,一个皇后可以控制横、竖、斜线等4个方向(或者说是8个方向),只要有棋子落入她的势力范围,则必死无疑,所以对方的每个棋子都要小心地躲开皇后的势力范围,选择一个合适的位置放置。如果在棋盘上有两个皇后,则新皇后控制的势力范围与第一个皇后控制的势力范围可以进行叠加,这样随着皇后数量的增加,皇后们控制的范围越来越大,直至控制了棋盘中全部的格子。原创 2023-12-16 23:02:36 · 785 阅读 · 0 评论 -
4. 无向图的各连通分支
输出每个连通分支的广度优先搜索序列(从连通分支的最小编号开始),不同分支以最小编号递增顺序列出。第一行为图的节点数n(节点编号0至n-1,0原创 2023-11-26 15:35:30 · 556 阅读 · 0 评论 -
3. 迷宫问题
迷宫有一个入口,一个出口。一个人从入口走进迷宫,目标是找到出口。阴影部分和迷宫的外框为墙,每一步走一格,每格有四个可走的方向,探索顺序为地图方向:南(下)、东(右)、北(上)、西(左)。输入:输入迷宫数组。第一行数据表示一个 n*n (n<=100)的迷宫;第二行开始的n行为迷宫数据。其中:0表示路,1表示墙,起点在左上角 <1,1> 的位置,终点在右下角 <n,n> 的位置。输出:若有解,输出从入口到出口的一条路径,否则输出 there is no solution!例(上图所示的迷宫数组)原创 2023-11-26 14:47:19 · 574 阅读 · 0 评论 -
1. 图的广度优先遍历
输入是图的顶点序列和边序列(顶点序列以*为结束标志,边序列以-1,-1为结束标志)。程序的输出为图的邻接表和广度优先遍历序列。本实验实现邻接表表示下无向图的广度优先遍历。原创 2023-11-25 16:16:32 · 183 阅读 · 0 评论 -
3. 快速排序
要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。注:1,cutoff值为5,不足cutoff使用插入排序。2,输入、输出格式参见测试用例0。原创 2023-10-31 11:42:07 · 397 阅读 · 0 评论 -
1. 折半查找
折半查找的查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。每条待查记录包含关键字项和其他项,如关键字项为15,其他项为该记录在查找表里的原序号4。对无序表的查找,还需要事先排列成有序表,再进行折半查找。输入:5 (记录的条数)各记录项:如 32 1输出:已按关键字排列好的非递减序列:如 (16 2)(20 5)(32 1)(35 3)(91 4)找不到时输出: error。原创 2023-10-31 10:22:23 · 172 阅读 · 0 评论 -
2. 计算WPL
根据哈夫曼树,我们可以为叶子节点分配相应的哈夫曼编码,使得编码长度短的更常见,这样可以有效地减少编码的总长度,达到数据压缩的目的。这里的带权路径长度就是叶子节点的权值与它到根节点的路径长度之积的总和。2. 在所有未构造二叉树的集合中选出两个权值最小的树作为左右子树,构造出一棵新的二叉树,同时这两个权值之和作为新的父节点的权值。以二叉树为例,叶子节点是没有子节点的节点,而根节点是最顶层的节点。1. 对每个叶子节点,计算根节点到该叶子节点的路径长度,即从根节点到叶子节点所经过的边的数量。原创 2023-10-24 11:09:29 · 1944 阅读 · 0 评论 -
1. 前缀码判定
请编写一个程序,判断输入的n个由1和0组成的编码是否为前缀码。如果这n个编码是前缀码,则输出"YES”;否则输出第一个与前面编码发生矛盾的编码。前缀码:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。每一个字符均不是其他字符编码的前缀,所以,输出:YES。编码11与前面的编码110的前缀,所以,输出:11。第2~n+1行为n个由0或1组成的编码。第1行为n(表示下面有n行编码)原创 2023-10-24 10:45:58 · 539 阅读 · 0 评论 -
3. 平衡二叉树
程序输入一个字符串(只包含小写字母),请按照字符的输入顺序建立平衡二叉排序树,并分别输出二叉树的先序序列、中序序列和后序序列,最后输出该二叉树向左旋转 90 度后的结构。原创 2023-10-17 21:32:51 · 489 阅读 · 0 评论 -
2. 排序二叉树
排序二叉树是指左子树的所有节点的值均小于它根节点的值,右子树的所有节点的值均大于它根节点的值,如下图是一棵排序二叉树。输入有一行,表示若干个要排序的数,输入0时停止。建立并中序遍历一个排序二叉树。和二叉树的中序遍历序列。原创 2023-10-17 21:22:10 · 498 阅读 · 0 评论 -
1. 树的建立与基本操作
程序的输入是一个表示树结构的广义表。假设树的根为 root ,其子树森林 F = ( T1 , T2 , … , Tn ),设与该树对应的广义表为 L ,则 L =(原子,子表 1 ,子表 2 , … ,子表 n ),其中原子对应 root ,子表 i ( 1原创 2023-10-14 10:17:09 · 595 阅读 · 0 评论 -
3.二叉树遍历序列还原
给出二叉树的中序遍历序列和后序遍历序列,编程还原该二叉树。第1行为二叉树的中序遍历序列。第2行为二叉树的后序遍历序列。二叉树的按层遍历序列。原创 2023-10-12 21:19:20 · 677 阅读 · 0 评论 -
4.从中缀向后缀转换表达式
中缀表达式就是我们通常所书写的数学表达式,后缀表达式也称为逆波兰表达式,在编译程序对我们书写的程序中的表达式进行语法检查时,往往就可以通过逆波兰表达式进行。总之,左括号和指数运算符在中缀表达式转换为后缀表达式的过程中需要被特殊处理,它们需要优先级高于其他运算符,并在栈中保持相对应的位置,以确保后续的处理和计算的正确性。为了简化编程实现,假定变量名均为单个字母,运算符只有+,-,*,/ 和^(指数运算),可以处理圆括号(),并假定输入的算术表达式正确。(A 一 (B*C 十 D)*E) / (F 十 G )原创 2023-10-04 16:25:50 · 787 阅读 · 0 评论 -
2.出栈序列
每组数据中,第一行为两个个整数 n 和 m。n 表示需要依次从 1~n 入栈,m 表示这组数据有 m 个出栈序列需要判断,当 n=0 且 m=0 时停止。对每一个出栈序列,如果能正常出栈,输出Yes,否则输出 No。求解规定序列能否由入栈出栈操作得到。接下来有行,每行表示一个出栈序列。原创 2023-10-02 16:55:37 · 314 阅读 · 0 评论 -
1. 括号匹配
假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。例[1+2*(3+4*(5+6))]括号匹配(1+2)*(1+2*[(1+2)+3)括号不匹配。原创 2023-10-04 10:21:21 · 171 阅读 · 0 评论 -
2. 孤独的运货员
卸货的过程是:首先查看最外面的箱子是否标记着 X 标签,如果是,代表这是运送到 X 国的货物,则放到 A 平台上,如果不是,则把该货箱放到B平台货物队列的末尾,然后处理下一箱货。每天,货车和货运飞机都这样周而复始的运行着,直到有一天因为报酬的原因,分理中心的工人开始罢工。航空公司的货运飞机往返于各个国家和货物分理中心之间,分理中心的货物运送到各个国家,再将各个国家发出的货物送到分理中心。从第二行往后一共有 N 行,每行一的第一个数字代表该站 B 平台上货物的总数,之后的每个数字代表每箱货物运送到哪个站。原创 2023-09-26 21:21:39 · 400 阅读 · 0 评论 -
4.一元多项式相乘
要求采用链表形式,求两个一元多项式的乘积:h3 = h1*h2。函数原型为:void multiplication( NODE * h1, NODE * h2, NODE * h3 )。每个一元多项式以指数递增的顺序输入多项式各项的系数(整数)、指数(整数)。以指数递增的顺序输出乘积: <系数,指数>,<系数,指数>,<系数,指数>,例如:1+2x+x2表示为:<1,0>,<2,1>,<1,2>,说明:本题目有预设代码,只要提交你编写的函数即可。零多项式的输出格式为:<0,0>,原创 2023-09-26 20:45:47 · 594 阅读 · 0 评论 -
3.一元多项式相加
编写一元多项式加法运算程序。要求用线性链表存储一元多项式(参照课本)。输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc。多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)输入:输入三个多项式,建立三个多项式链表Pa、Pb、Pc。对应一组输入,输出一次操作的结果(参见测试用例)。原创 2023-09-26 13:10:41 · 331 阅读 · 0 评论 -
1. 综教楼后的那个坑
每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。* ********* 4原创 2023-09-26 12:01:43 · 206 阅读 · 0 评论 -
3. 双向约瑟夫问题
已知 n 个人(不妨分别以编号 1,2,3,...,n 代表 )围坐在一张圆桌周围,首先从编号为 k 的人从 1 开始顺时针报数,1, 2, 3, ...,记下顺时针数到 m 的那个人,同时从编号为 k 的人开始逆时针报数,1, 2, 3, ...,数到 m 后,两个人同时出列。然后从出列的下一个人又从 1 开始继续进行双向报数,数到 m 的那两个人同时出列,...;则输出:4-6,2,1-3,5,。其中第2次只输出一个2,表示第二次双向报数时,恰好都落在编号2上,所以只有一个编号出列。原创 2023-09-19 14:34:38 · 242 阅读 · 0 评论 -
4. 基本操作(集合合并)
编程要求:题目中已经给出了主函数和部分已经实现的基本操作,请阅读给出的程序,编写其他尚未完成的基本操作(基本操作的定义请参见严蔚敏老师的教材)。我们讨论一个如何使用基本运算将两个集合合并的问题。下面,是采用基本操作完成集合合并的操作。设:有两个集合A和B分别用两个线性表LA和LB表示。求一个新的集合 A=A∪B。:提交代码的时候,仅需提交你编写的那三个基本操作函数即可。问题: 线性表的合并A=A∪B。按照要求合并后的集合。原创 2023-09-19 14:06:30 · 526 阅读 · 0 评论 -
2.求循环小数
M ),均可以求出对应的小数。如果采用链表表示各个小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。仅编写将分数转换为小数的函数 change( int n, int m, NODE * head )。对于任意的真分数 N/M ( 0 < N。转换后的小数(不超过 50 )原创 2023-09-19 11:41:26 · 735 阅读 · 0 评论 -
1.验证表
本实验编写具有如下功能的程序:输入两个学生记录表LIST1,LIST2,在表LIST2中找出所有没有在表LIST1中出现的学生记录(设表LIST1为基础数据表,非空)。如果学生记录表LIST2中的存在学号,姓名不能与表LIST1完全匹配的记录,则输出 学号(%8d)姓名(%15s)is not in LIST1.如果学生记录表LIST2中的记录都包含在LIST1中,则输出the records of LIST2 are all in the LIST1.原创 2023-09-19 11:22:19 · 293 阅读 · 0 评论 -
Homework 1
北理工《数据结构与算法分析:C语言描述》习题答案原创 2023-09-14 10:51:35 · 234 阅读 · 0 评论 -
1. 约瑟夫问题
已知n个人(不妨分别以编号1,2,3,…,n 代表 )围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, ...,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。输出:k should not bigger than n.输出:4 6 8 1 3 7 2 9 5。输入:n, k, m。原创 2023-09-12 14:01:39 · 469 阅读 · 0 评论
分享