
数据结构与算法1设计
文章平均质量分 71
记录大二上数据结构与算法设计这门课做过的题
Cosmo9
bit的一条咸鱼
展开
-
约瑟夫问题
约瑟夫问题 (本题要求用循环链表实现)约瑟夫问题是一个经典的问题。已知n个人(不妨分别以编号1,2,3,…,n 代表 )围坐在一张圆桌周围,从编号为 k 的人开始,从1开始顺时针报数1, 2, 3, ...,顺时针数到m 的那个人,出列并输出。然后从出列的下一个人开始,从1开始继续顺时针报数,数到m的那个人,出列并输出,…依此重复下去,直到圆桌周围的人全部出列。输入:n, k, m输出:按照出列的顺序依次输出出列人的编号,编号中间相隔一个空格,每10个编号为一行。非法输入的对应输出如下a)原创 2023-09-12 14:51:37 · 373 阅读 · 0 评论 -
验证表(BIT)
本实验编写具有如下功能的程序:输入两个学生记录表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-20 22:09:40 · 87 阅读 · 1 评论 -
基本操作(集合合并)
我们讨论一个如何使用基本运算将两个集合合并的问题。下面,是采用基本操作完成集合合并的操作。问题: 线性表的合并A=A∪B设:有两个集合A和B分别用两个线性表LA和LB表示。求一个新的集合 A=A∪B。输入:两个集合输出:按照要求合并后的集合。编程要求:题目中已经给出了主函数和部分已经实现的基本操作,请阅读给出的程序,编写其他尚未完成的基本操作(基本操作的定义请参见严蔚敏老师的教材)。注意:提交代码的时候,仅需提交你编写的那三个基本操作函数即可。预设代码前置代码。原创 2023-09-20 22:13:57 · 156 阅读 · 0 评论 -
求循环小数
对于任意的真分数 N/M ( 0 < N< M ),均可以求出对应的小数。如果采用链表表示各个小数,对于循环节采用循环链表表示,则所有分数均可以表示为如下链表形式。N M转换后的小数(不超过 50 )仅编写将分数转换为小数的函数 change( int n, int m, NODE * head )。原创 2023-09-20 22:11:20 · 356 阅读 · 2 评论 -
孤独的运货员
卸货的过程是:首先查看最外面的箱子是否标记着 X 标签,如果是,代表这是运送到 X 国的货物,则放到 A 平台上,如果不是,则把该货箱放到B平台货物队列的末尾,然后处理下一箱货。move函数,接收一个数组和一个数字作为参数,将数组中的元素向前移动一位,最后返回新的元素数量,主要为了调整次序。每天,货车和货运飞机都这样周而复始的运行着,直到有一天因为报酬的原因,分理中心的工人开始罢工。航空公司的货运飞机往返于各个国家和货物分理中心之间,分理中心的货物运送到各个国家,再将各个国家发出的货物送到分理中心。原创 2023-09-26 20:11:23 · 87 阅读 · 0 评论 -
综教楼后的那个坑
每个平面 i 可以用两个数字来描述,即它的宽度 Wi 和高度 Hi,其中 1 ≤ Wi ≤ 1,000、1 ≤ Hi ≤ 1,000,000,而这个坑最特别的地方在于坑底每个平面的高度都是不同的。每到夏天,雨水会把坑填满,而在其它的季节,则需要通过人工灌水的方式把坑填满。随着水位的增长,水自然会向其它平面扩散,当水将某平面覆盖且水高达到一个单位时,就认为该平面被水覆盖了。在 LIT 综教楼后有一个深坑,关于这个坑的来历,有很多种不同的说法。* ********* 4原创 2023-09-26 15:00:35 · 85 阅读 · 0 评论 -
双向约瑟夫问题
约瑟夫问题是一个经典的问题,我们不妨将这个经典问题进行扩展,变成一个双向的约瑟夫问题。已知 n 个人(不妨分别以编号 1,2,3,...,n 代表 )围坐在一张圆桌周围,首先从编号为 k 的人从 1 开始顺时针报数,1, 2, 3, ...,记下顺时针数到 m 的那个人,同时从编号为 k 的人开始逆时针报数,1, 2, 3, ...,数到 m 后,两个人同时出列。然后从出列的下一个人又从 1 开始继续进行双向报数,数到 m 的那两个人同时出列,...;。依此重复下去,直到圆桌周围的人全部出列。原创 2023-09-20 22:16:49 · 98 阅读 · 0 评论 -
平衡二叉树
程序输入一个字符串(只包含小写字母),请按照字符的输入顺序建立平衡二叉排序树,并分别输出二叉树的先序序列、中序序列和后序序列,最后输出该二叉树向左旋转 90 度后的结构。例如:向左旋转 90 度后,以每层向里缩进 4 个空格的方式输出,输出结果为:igfadcb输出:Tree:zyxnmkiga。原创 2023-10-19 21:49:36 · 292 阅读 · 0 评论 -
一元多项式相加
(提示:调用AddPolyn(polynomial &Pa, polynomial Pb), 调用PrintPolyn(polynomial P))。编写一元多项式加法运算程序。输出:显示三个输入多项式Pa、Pb、Pc、和多项式Pa+Pb、多项式Pa+Pb+Pc。多项式A包含的项数,以指数递增的顺序输入多项式A各项的系数(整数)、指数(整数)多项式B包含的项数,以指数递增的顺序输入多项式B各项的系数(整数)、指数(整数)多项式C包含的项数,以指数递增的顺序输入多项式C各项的系数(整数)、指数(整数)原创 2023-09-28 21:07:31 · 73 阅读 · 0 评论 -
括号匹配()
假设一个算术表达式中包含圆括号、方括号两种类型的括号,试编写一个判断表达式中括号是否匹配的程序,匹配返回Match succeed!,否则返回Match false!。例[1+2*(3+4*(5+6))]括号匹配(1+2)*(1+2*[(1+2)+3)括号不匹配。原创 2023-10-06 16:20:42 · 123 阅读 · 0 评论 -
二叉树的建立与基本操作
编写程序实现二叉树的如下操作:1) 建立二叉链表2) 二叉树的先序、中序、后序遍历3) 求二叉树的叶子结点个数4) 将二叉树中所有结点的左、右子树相互交换按完全二叉树的层次关系给出二叉树的遍历序列(#表示虚结点,数据结点为单一字符)。二叉树的凹入表示二叉树的先序序列、中序序列、后序序列二叉树叶子结点个数左、右子树相互交换后的二叉树的凹入表示左、右子树相互交换后的二叉树的先序序列、中序序列、后序序列。原创 2023-10-13 12:29:06 · 391 阅读 · 0 评论 -
表达式求值
我们的教材中已经介绍了表达式求值的算法,现在我们将该算法的功能进行扩展,要求可以处理的运算符包括:+、-、*、/、%(整数取余)、^(乘方)、(、)。在表达式中,如果操作数出现负数(例如-8),则要特别注意。如果在计算过程中出现除数为0的情况,则输出:Divide 0.采用算符优先算法,计算的中间结果只保留整数。从第二行起的后面N行为N个由整数构成的表达式。如果判断出表达式有错误,则输出:error.共N行,每行为相应表达式的计算结果。10加-8表示为:10+-8。10减-8表示为:10--8。原创 2023-10-07 14:46:21 · 294 阅读 · 0 评论 -
从中缀向后缀转换表达式
中缀表达式就是我们通常所书写的数学表达式,后缀表达式也称为逆波兰表达式,在编译程序对我们书写的程序中的表达式进行语法检查时,往往就可以通过逆波兰表达式进行。我们所要设计并实现的程序就是将中缀表示的算术表达式转换成后缀表示,例如,将中缀表达式(A 一 (B*C 十 D)*E) / (F 十 G )转换为后缀表示为:ABC*D十E*--FG十/为了简化编程实现,假定变量名均为单个字母,运算符只有+,-,*,/ 和^(指数运算),可以处理圆括号(),并假定输入的算术表达式正确。原创 2023-10-07 14:49:29 · 155 阅读 · 1 评论 -
排序二叉树
建立并中序遍历一个排序二叉树排序二叉树是指左子树的所有节点的值均小于它根节点的值,右子树的所有节点的值均大于它根节点的值,如下图是一棵排序二叉树输入:输入有一行,表示若干个要排序的数,输入0时停止输出二叉树的凹入表示和二叉树的中序遍历序列sample:input:output:12223435565767777889。原创 2023-10-19 19:52:00 · 97 阅读 · 0 评论 -
堆排序()
实验要求:用堆排序算法按关键字递减的顺序排序。程序输入:待排序记录数(整数)和待排序记录(整数序列);程序输出:建堆结果和建堆后第一、第二次筛选结果。(注:待排序记录数大于等于3)原创 2023-10-31 12:41:51 · 136 阅读 · 0 评论 -
前缀码判定
请编写一个程序,判断输入的n个由1和0组成的编码是否为前缀码。如果这n个编码是前缀码,则输出"YES”;否则输出第一个与前面编码发生矛盾的编码。比较简单注释就只写了下思路,其实就是哈夫曼树,以后应该要学。也有可能是我上课睡觉听漏了,说不定已经教了。前缀码:任何一个字符的编码都不是同一字符集中另一个字符的编码的前缀。每一个字符均不是其他字符编码的前缀,所以,输出:YES。编码11与前面的编码110的前缀,所以,输出:11。第2~n+1行为n个由0或1组成的编码。第1行为n(表示下面有n行编码)原创 2023-10-24 18:54:07 · 1103 阅读 · 0 评论 -
股票撮合系统
在股票交易中,股民可以通过各种手段将委托送到股票交易所。每个委托主要说明了股民身份、买卖的股票、价格和数量。交易的规则是价格优先、时间优先,即出的价格最高的人先买,出的价格最低的人先卖。两个委托只有价格合适时才能成交,未成交的委托按价格顺序放在撮合队列中。每个股票有两个撮合队列:买队列和卖队列。只有当买委托的价格高于等于卖委托的价格,两个委托才可以成交,成交价取两个委托价格的平均值,成交量取两个委托数量的最小值。委托可以是完全成交或部分成交,部分成交的委托保留在撮合队列中继续交易。原创 2023-10-07 18:27:08 · 650 阅读 · 0 评论 -
树的建立与基本操作
程序的输入是一个表示树结构的广义表。假设树的根为 root ,其子树森林 F = ( T1 , T2 , …, Tn ),设与该树对应的广义表为 L ,则 L =(原子,子表 1 ,子表 2 , …,子表 n ),其中原子对应 root ,子表 i ( 1原创 2023-10-12 20:00:20 · 107 阅读 · 0 评论 -
博弈树 (15分)
棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。假设游戏由两个人( A 和 B )玩,开始由某个人从根结点开始走,两个人轮流走棋,每次只能走一步, 下一步棋只能选择当前结点的孩子结点,谁先走到叶子结点为胜。例如,对于下图所示的博弈树,若 A 先走,可以选 f , B 若选 h ,则 A 选 j 胜。原创 2023-10-26 01:34:32 · 566 阅读 · 0 评论 -
出栈序列()
1.求解规定序列能否由入栈出栈操作得到输入:有若干组数据输入每组数据中,第一行为两个个整数 n 和 m。n 表示需要依次从 1~n 入栈,m 表示这组数据有 m 个出栈序列需要判断,当 n=0 且 m=0 时停止。接下来有行,每行表示一个出栈序列输出:对每一个出栈序列,如果能正常出栈,输出Yes,否则输出 No。原创 2023-10-06 17:22:54 · 239 阅读 · 0 评论 -
计算WPL
Huffman编码是通信系统中常用的一种不等长编码,它的特点是:能够使编码之后的电文长度最短。更多关于Huffman编码的内容参考教材第十章。第一行为要编码的符号数量n第二行~第n+1行为每个符号出现的频率对应哈夫曼树的带权路径长度WPL。原创 2023-10-25 15:06:47 · 241 阅读 · 0 评论 -
快速排序()
要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。注:1,cutoff值为5,不足cutoff使用插入排序。2,输入、输出格式参见测试用例0。原创 2023-10-31 12:56:07 · 125 阅读 · 0 评论 -
折半查找()
折半查找的查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。每条待查记录包含关键字项和其他项,如关键字项为15,其他项为该记录在查找表里的原序号4。对无序表的查找,还需要事先排列成有序表,再进行折半查找。输入:5 (记录的条数)各记录项:如 32 1输出:已按关键字排列好的非递减序列:如 (16 2)(20 5)(32 1)(35 3)(91 4)找不到时输出: error。原创 2023-10-31 10:22:35 · 139 阅读 · 0 评论 -
一元多项式相乘
要求采用链表形式,求两个一元多项式的乘积:h3 = h1*h2。函数原型为:void multiplication( NODE * h1, NODE * h2, NODE * h3 )。每个一元多项式以指数递增的顺序输入多项式各项的系数(整数)、指数(整数)。以指数递增的顺序输出乘积: ,,,例如:1+2x+x2表示为:,,,说明:本题目有预设代码,只要提交你编写的函数即可。零多项式的输出格式为:,原创 2023-09-28 21:10:28 · 91 阅读 · 0 评论 -
二叉树遍历序列还原
给出二叉树的中序遍历序列和后序遍历序列,编程还原该二叉树。第1行为二叉树的中序遍历序列第2行为二叉树的后序遍历序列二叉树的按层遍历序列。原创 2023-10-13 19:53:30 · 108 阅读 · 0 评论