- 博客(47)
- 收藏
- 关注
原创 9-5 E. DS图—图非0面积
DS图—图非0面积编程计算由"1"围成的下列图形的面积。面积计算方法是统计"1"所围成的闭合曲线中"0"点的数目。如图所示,在10*10的二维数组中,"1"围住了15个点,因此面积为15。提示:queue
2024-02-23 20:31:50
577
原创 9-4 D. DS图遍历--广度优先搜索
DS图遍历--广度优先搜索给出一个图的邻接矩阵,对图进行深度优先搜索,从顶点0开始代码框架参考课本P170算法7.6,同学们可在理解的基础上自行设计算法,不强制要求完全相同注意:图n个顶点编号从0到n-1
2024-02-23 14:00:37
387
原创 9-3 C. DS图遍历--深度优先搜索
DS图遍历--深度优先搜索给出一个图的邻接矩阵,对图进行深度优先搜索,从顶点0开始代码框架参考课本P169算法7.4和7.5,同学们可在理解的基础上自行设计算法,不强制要求完全相同注意:图n个顶点编号从0到n-1
2024-02-23 13:11:06
403
原创 9-2 B. DS图—图的邻接矩阵存储及度计算
DS图—图的邻接矩阵存储及度计算假设图用邻接矩阵存储。输入图的顶点信息和边信息,完成邻接矩阵的设置,并计算各顶点的入度、出度和度,并输出图中的孤立点(度为0的顶点)--程序要求--若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio程序中若include多过一个头文件,不看代码,作0分处理不允许使用第三方对象或函数实现本题的要求
2024-02-23 12:46:41
443
原创 9-1 A. 图综合练习--构建邻接表
图综合练习--构建邻接表已知一有向图,构建该图对应的邻接表。邻接表包含数组和单链表两种数据结构,其中每个数组元素也是单链表的头结点,数组元素包含两个属性,属性一是顶点编号info,属性二是指针域next指向与它相连的顶点信息。单链表的每个结点也包含两个属性,属性一是顶点在数组的位置下标,属性二是指针域next指向下一个结点。
2024-02-22 20:59:12
442
原创 8-2 B. 树的双亲结构转孩子链表结构
树的双亲结构转孩子链表结构给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点编写程序,输出该树的孩子链表表示法结果。
2024-02-16 20:35:45
569
原创 8-1 A. 树的先序遍历(双亲转先序)
树的先序遍历(双亲转先序)给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点编写程序,输出该树的先根遍历结果。
2024-02-16 19:37:26
526
原创 7-5 E. DS二叉树--基于数组存储的构建
DS二叉树--基于数组存储的构建任意二叉树可以根据完全二叉树性质保存在一个数组中。已知二叉树的数组存储,用程序构建该二叉树。提示:用递归方法或非递归都可以
2024-02-16 11:26:46
329
原创 7-4 D. DS树--二叉树之最大路径
DS树--二叉树之最大路径给定一颗二叉树的逻辑结构(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构二叉树的每个结点都有一个权值,从根结点到每个叶子结点将形成一条路径,每条路径的权值等于路径上所有结点的权值和。编程求出二叉树的最大路径权值。如下图所示,共有4个叶子即有4条路径,路径1权值=5 + 4 + 11 + 7 = 27路径2权值=5 + 4 + 11 + 2 = 22路径3权值=5 + 8 + 13 = 26路径4权值=5 + 8 + 4 +
2024-02-15 20:25:03
411
原创 7-3 C. DS树--带权路径和
DS树--带权路径和二叉树的创建使用含空树表示的先序遍历序列,计算一棵二叉树的带权路径总和,即求赫夫曼树的带权路径和。已知一棵二叉树的叶子权值,该二叉树的带权路径和WPL等于叶子权值乘于根节点到叶子的分支数,然后求总和。如下图中,叶子都用大写字母表示,权值对应为:A-7,B-6,C-2,D-3树的带权路径和 = 7*1 + 6*2 + 2*3 + 3*3 = 34
2024-02-14 11:35:06
513
原创 7-2 B. DS二叉树--赫夫曼树解码
DS二叉树--赫夫曼树解码已知赫夫曼编码算法和程序,在此基础上进行赫夫曼解码可以增加一个函数:int Decode(const string codestr, char txtstr[]);//输入编码串codestr,输出解码串txtstr该方法如果解码成功则返回1,解码失败则返回-1,本程序增加宏定义ok表示1,error表示-1赫夫曼解码算法如下:定义指针p指向赫夫曼树结点,指针i指向编码串,定义ch逐个读取编码串的字符初始操作包括读入编码串str,设置p指向根结点,i为0表示指向串首
2024-02-07 19:36:48
418
原创 7-1 A. DS二叉树--赫夫曼树的构建与编码
DS二叉树--赫夫曼树的构建与编码给定n个权值,根据这些权值构造huffman树,并进行huffman编码大家参考课本算法6.12为主,注意数组访问是从位置1开始要求:赫夫曼的构建中,默认左孩子权值不大于右孩子权值
2024-02-07 14:04:00
595
原创 6-6 F. DS二叉树——二叉树之数组存储
DS二叉树——二叉树之数组存储二叉树可以采用数组的方法进行存储,把数组中的数据依次自上而下,自左至右存储到二叉树结点中,一般二叉树与完全二叉树对比,比完全二叉树缺少的结点就在数组中用0来表示。,如下图所示从上图可以看出,右边的是一颗普通的二叉树,当它与左边的完全二叉树对比,发现它比完全二叉树少了第5号结点,所以在数组中用0表示,同样它还少了完全二叉树中的第10、11号结点,所以在数组中也用0表示。结点存储的数据均为非负整数
2024-02-05 20:50:49
491
原创 6-4 D. DS二叉树--层次遍历
DS二叉树--层次遍历层次遍历二叉树,是从根结点开始遍历,按层次次序“自上而下,从左至右”访问树中的各结点。建树方法采用“先序遍历+空树用0表示”的方法建议使用队列结构实现,算法框架如下:定义一个空白队列和一个树结点指针p设T是指向根结点的指针变量,若二叉树为空,则返回;否则,令p=T,p入队,执行以下循环:(1)队首元素出队到p;(2)访问p所指向的结点; (3)p所指向的结点的左、右子结点依次入队。(4)跳转步骤1循环,直到队列空为止例如把上述算法中的访问操作定义
2024-02-04 17:16:10
617
原创 6-3 C. DS二叉树——二叉树之父子结点
DS二叉树——二叉树之父子结点给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘0’表示,例如AB0C00D00),建立该二叉树的二叉链式存储结构。编写程序输出该树的所有叶子结点和它们的父亲结点
2024-02-03 21:41:56
1026
原创 6-2 B. DS二叉树--叶子数量
DS二叉树--叶子数量计算一颗二叉树包含的叶子结点数量。提示:叶子是指它的左右孩子为空。建树方法采用“先序遍历+空树用0表示”的方法,即给定一颗二叉树的先序遍历的结果为AB0C00D00,其中空节点用字符‘0’表示。
2024-02-03 21:05:06
479
原创 6-1 A. DS二叉树—二叉树构建与遍历(不含框架)
DS二叉树—二叉树构建与遍历(不含框架)给定一颗二叉树的逻辑结构如下图,(先序遍历的结果,空树用字符‘#’表示,例如AB#C##D##),建立该二叉树的二叉链式存储结构,并输出该二叉树的先序遍历、中序遍历和后序遍历结果。
2024-02-02 21:02:36
522
原创 5-5 E. 可重叠子串 (Ver. I)
可重叠子串 (Ver. I)给定一个字符串(模式串)和一些待查找的字符串,求每个待查找字符串在模式串中出现的次数(可重叠)
2024-02-02 20:18:58
456
原创 5-4 D. DS串应用—最长重复子串
DS串应用—最长重复子串求串的最长重复子串长度(子串不重叠)。例如:abcaefabcabc的最长重复子串是串abca,长度为4。
2024-02-01 22:59:07
472
原创 5-3 C. 串应用- 计算一个串的最长的真前后缀
串应用- 计算一个串的最长的真前后缀给定一个串,如ABCDAB,则ABCDAB的真前缀有:{ A, AB,ABC, ABCD, ABCDA }ABCDAB的真后缀有:{ B, AB,DAB, CDAB, BCDAB } 因此,该串的真前缀和真后缀中最长的相等串为AB,我们称之为该串的“最长的真前后缀”。试实现一个函数string matched_Prefix_Postfix(string str),得到输入串str的最长的真前后缀。若不存在最长的真前后缀则输出empty
2024-02-01 22:25:20
442
原创 5-2 B. DS串应用--串替换
DS串应用--串替换给出主串、模式串、替换串,用KMP算法找出模式串在主串的位置,然后用替换串的字符替换掉模式串本题只考虑一处替换的情况,如果你想做的完美一些,能够实现多处替换那可能需要考虑模式串和替换串长度不一致的情况
2024-01-31 22:05:33
557
原创 4-6 F. DS队列--组队列
DS队列--组队列组队列是队列结构中一种常见的队列结构,在很多地方有着广泛应用。组队列是是指队列内的元素分组聚集在一起。组队列包含两种命令:1、 ENQUEUE,表示当有新的元素进入队列,首先会检索是否有同一组的元素已经存在,如果有,则新元素排在同组的最后,如果没有则插入队列末尾。2、 DEQUEUE,表示队列头元素出队3、 STOP,停止操作
2024-01-27 11:43:53
413
原创 4-5 E. DS栈+队列—排队游戏
DS栈+队列—排队游戏在幼儿园中,老师安排小朋友做一个排队的游戏。首先老师精心的把数目相同的小男孩和小女孩编排在一个队列中,每个小孩按其在队列中的位置发给一个编号(编号从0开始)。然后老师告诉小朋友们,站在前边的小男孩可以和他后边相邻的小女孩手拉手离开队列,剩余的小朋友重新站拢,再按前后相邻的小男孩小女孩手拉手离开队列游戏,如此往复。由于教师精心的安排,恰好可以保证每两个小朋友都能手拉手离开队列,并且最后离开的两个小朋友是编号最小的和最大的两个小朋友。
2024-01-27 10:44:40
395
原创 4-4 D. 银行排队问题之单队列多窗口加VIP服务
银行排队问题之单队列多窗口加VIP服务假设银行有K个窗口提供服务,窗口前设一条黄线,所有顾客按到达时间在黄线后排成一条长龙。当有窗口空闲时,下一位顾客即去该窗口处理事务。当有多个窗口可选择时,假设顾客总是选择编号最小的窗口。有些银行会给VIP客户以各种优惠服务,例如专门开辟VIP窗口。为了最大限度地利用资源,VIP窗口的服务机制定义为:当队列中没有VIP客户时,该窗口为普通顾客服务;当该窗口空闲并且队列中有VIP客户在等待时,排在最前面的VIP客户享受该窗口的服务。同时,当轮到某VIP客户出列时,若VI
2024-01-26 14:47:51
575
原创 4-3 C. 银行业务队列简单模拟
银行业务队列简单模拟设某银行有A、B两个业务窗口,且处理业务的速度不一样,其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时,B窗口处理完1个顾客。给定到达银行的顾客序列,请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时间间隔,并且当不同窗口同时处理完2个顾客时,A窗口顾客优先输出。
2024-01-24 22:06:57
384
1
原创 4-2 B. DS队列+堆栈--数制转换
DS队列+堆栈--数制转换对于任意十进制数转换为k进制,包括整数部分和小数部分转换。整数部分采用除k求余法,小数部分采用乘k取整法例如x=19.125,求2进制转换整数部分19, 小数部分0.12519 / 2 = 9 … 1 0.125 * 2 = 0.25 … 09 / 2 = 4 … 1 0.25 * 2 = 0.5 … 04 / 2 = 2 … 0 0.5 * 2 = 1 … 12 / 2 = 1 … 01 / 2 = 0 … 1所以
2024-01-24 21:29:08
481
1
原创 4-1 A. DS队列之银行排队
DS队列之银行排队在银行营业大厅共服务3种客户,类型为A\B\C,大厅分别设置了3个窗口分别服务三种客户,即每个窗口只服务一种客户。现有一批客户来银行办理业务,每个客户都有类型和办理业务时间。每个窗口按照客户到来的顺序进行服务。编程实现它们的办理流程,请使用C++自带的queue必须使用队列实现,其他方法0分!
2024-01-23 22:32:45
397
1
原创 3-4 D. DS堆栈--括号匹配
DS堆栈--括号匹配处理表达式过程中需要对括号匹配进行检验,括号匹配包括三种:“(”和“)”,“[”和“]”,“{”和“}”。例如表达式中包含括号如下:( ) [ ( ) ( [ ] ) ] { }1 2 3 4 5 6 7 8 9 10 11 12从上例可以看出第1和第2个括号匹配,第3和第10个括号匹配,4和5匹配,6和9匹配,7和8匹配,11和12匹配。从中可以看到括号嵌套的的情况是比较复杂的,使用堆栈可以很方便的处理这种括号匹配检验。
2024-01-22 15:12:05
653
原创 3-3 C. DS堆栈--迷宫求解
DS堆栈--迷宫求解给出一个N*N的迷宫矩阵示意图,从起点[0,0]出发,寻找路径到达终点[N-1, N-1]要求使用堆栈对象来实现,具体算法参考课本3.2.4节51页
2024-01-21 17:58:46
1902
1
原创 3-2 B. DS堆栈--行编辑
B. DS堆栈--行编辑使用C++的STL堆栈对象,编写程序实现行编辑功能。行编辑功能是:当输入#字符,则执行退格操作;如果无字符可退就不操作,不会报错本程序默认不会显示#字符,所以连续输入多个#表示连续执行多次退格操作每输入一行字符打回车则表示字符串结束注意:必须使用堆栈实现,而且结果必须是正序输出
2024-01-20 23:07:53
341
原创 3-1 A. DS堆栈--逆序输出(STL栈使用)
DS堆栈--逆序输出(STL栈使用)C++中已经自带堆栈对象stack,无需编写堆栈操作的具体实现代码。本题目主要帮助大家熟悉stack对象的使用,然后实现字符串的逆序输出输入一个字符串,按字符按输入顺序压入堆栈,然后根据堆栈后进先出的特点,做逆序输出stack类使用的参考代码n包含头文件:#include n创建一个堆栈对象s(注意stack是模板类):stack s;//堆栈的数据类型是字符型n把一个字符ct压入堆栈:s.pus
2024-01-20 21:46:27
360
原创 2-10 J. DS循环链表—约瑟夫环(Ver. I - A)
DS循环链表—约瑟夫环(Ver. I - A)N个人坐成一个圆环(编号为1 - N),从第S个人开始报数,数到K的人出列,后面的人重新从1开始报数。问最后剩下的人的编号。例如:N = 3,K = 2,S = 1。2号先出列,然后是1号,最后剩下的是3号。要求使用循环链表实现。
2024-01-20 21:24:32
413
原创 2-9 I. DS单链表--结点交换
DS单链表--结点交换用C++实现含头结点的单链表,然后实现单链表的两个结点交换位置。注意不能简单交换两个结点包含数据,必须通过修改指针来实现两个结点的位置交换交换函数定义可以参考:swapNode(int pa, int pb) //pa和pb表示两个结点在单链表的位置序号swapNode (ListNode * p, ListNode * q) //p和q表示指向两个结点的指针
2024-01-19 21:31:33
460
1
原创 2-8 H. DS线性表—多项式相加
DS线性表—多项式相加对于一元多项式p(x)=p0+p1x+p2x2+…+pnxn,每个项都有系数和指数两部分,例如p2x2的系数为p2,指数为2。编程实现两个多项式的相加。例如5+x+2x2+3x3,-5-x+6x2+4x4,两者相加结果:8x2+3x3+4x4其中系数5和-5都是x的0次方的系数,相加后为0,所以不显示。x的1次方同理不显示。要求用单链表实现。
2024-01-18 23:14:36
802
1
原创 2-7 G. DS单链表--合并
DS单链表--合并假定两个单链表是递增有序,定义并实现以下函数,完成两个单链表的合并,继续保持递增有序int LL_merge(ListNode *La, ListNode *Lb)
2024-01-18 19:21:37
429
1
原创 2-6 F. DS单链表--存储结构与操作
DS单链表--存储结构与操作实现含头结点的单链表属性包括:data数据域、next指针域操作包括:插入、删除、查找注意:单链表不是数组,所以位置从1开始对应首结点,头结点不放数据
2024-01-18 15:43:08
364
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人