
数据结构与算法
文章平均质量分 56
实验报告
噗-噗
教学相长也!
展开
-
实验五 -2 实现学生信息的多关键字排序
设计算法,实现学生信息的多关键字排序。假设有很多学生记录,每个学生记录包括姓名、性别和班号字段,设计一个算法按班号、性别有序输出学生记录,即先按班号输出,同一个班的学生再按性别输出。班号取值为1001—1030。原创 2024-01-31 16:34:28 · 685 阅读 · 0 评论 -
实验五 -1 快速排序算法和直接插入排序算法
对数据序列{6,8,7,9,0,1,3,2,4,5},请分别用快速排序算法和直接选择排序设计算法对数据序列进行排序;原创 2024-01-31 16:20:20 · 1060 阅读 · 0 评论 -
实验四 -2 使用二叉排序统计一个字符串中出现的字符及其次数
使用二叉排序树的相关知识,编写程序,统计一个字符串中的字符及其出现的次数。原创 2024-01-31 15:54:47 · 442 阅读 · 0 评论 -
实验四 -1 实现顺序查找的算法
编写程序实现顺序查找的算法,并在此基础上分别使用这种查找算法设计算法对数据序列{3,6,2,10,1,8,5,7,4,9},完成以下操作:查找关键字5的过程,要求输出与关键字5比较的元素以及输出关键字5的位置。原创 2024-01-31 15:41:11 · 467 阅读 · 0 评论 -
实验三 -2 使用Dijkstra算法求解最小总费用
编写程序,求解最小费用问题(Dijkstra)。问题描述:假设有N个车站(车站的编号为1到N)和N个人,首先所有人均在车站1,将这N个人分派到N个车站去,每一个分派到一个车站,这些人只能乘坐公交车,每条单向公交车连接连个车站并且有一定的费用;接着这N个人又回到车站1,求最小总花费。原创 2024-01-31 15:13:31 · 1300 阅读 · 0 评论 -
实验三 -1 邻接表和邻接矩阵的创建 深度优先遍历和广度优先遍历
编写一个程序,设计带权图的邻接表和邻接矩阵的创建于输出运算,并在此基础上设计一个主程序:(1)实现下页带权图的邻接矩阵与邻接表的创建与输出运算;(2)实现从顶点0开始的深度优先遍历序列和广度优先遍历序列(递归算法)。原创 2024-01-31 14:49:50 · 1189 阅读 · 0 评论 -
实验二 -3 用二叉树表示家谱关系并实现各种查找功能
4.实现文件操作功能:编写序列化和反序列化的函数,将二叉树转换为文件中的数据结构,以及从文件中读取数据并重构二叉树。要求编写一个程序,采用一棵二叉树表示一个家谱关系(由若干家谱记录构成,每个家谱记录由父亲、妻子和儿子的姓名构成,姓名是关键字)要求程序具有文件操作功能和家谱操作功能。该函数应接收一个家谱记录作为参数,并根据父亲、妻子和儿子的姓名在二叉树中进行查找或创建新的节点。1.定义二叉树的数据结构:使用结构体定义节点类型,包含姓名、指向父亲的指针、指向妻子的指针和指向儿子的指针等字段。原创 2024-01-31 14:09:55 · 1588 阅读 · 0 评论 -
实验二 -2 哈夫曼树的构造及哈夫曼编码
h,各字母出现的频率分别为:0.07,0.19,0.02,0.06,0.32,0.03,0.21和0.10,,要求编写一个程序exam2-1-2,根据各字母及出现频率构造出对应的哈夫曼树,输出对应的哈夫曼编码和平均查找长度。此外,哈夫曼编码的生成是通过深度优先遍历来实现的,而平均查找长度的计算则是基于每个字符的路径长度和频率。(五)计算平均查找长度:对于每个字符,计算其从根节点到该字符所在节点的路径长度,然后将所有字符的路径长度与频率相乘并求和,最后除以所有字符的频率总和。(五)将新创建的父节点插入堆中。原创 2024-01-30 23:45:44 · 955 阅读 · 0 评论 -
实验二 -1: 二叉树的基本操作
具体实现时,定义一个结构体表示二叉树的节点,包含节点的值、左孩子指针和右孩子指针。(3)在中序序列输出函数中,首先递归地输出左子树的中序序列,然后访问根节点,最后递归地输出右子树的中序序列。(4)在后序序列输出函数中,首先递归地输出左子树的后序序列和右子树的后序序列,最后访问根节点。(2)在先序序列输出函数中,首先访问根节点,然后递归地输出左子树和右子树的先序序列。(2)从根节点开始,依次访问二叉树的每个节点,调用该函数输出节点的信息。(2)采用递归法分别输出该二叉树的先序序列,中序序列和后序序列。原创 2024-01-30 22:54:39 · 412 阅读 · 0 评论 -
实验一 -4 稀疏矩阵基本运算
对于加、减、乘运算,仅对非零元素进行运算,并更新对应的三元组。2.在实现稀疏矩阵的转置时,需要考虑到矩阵的行列交换操作,这需要理解稀疏矩阵的结构和转置算法, 在实现稀疏矩阵的加、减、乘运算时,需要注意不同运算符的优先级。5.稀疏矩阵的加、减、乘运算可以通过相应的算法实现,其中乘法运算相对复杂一些,需要考虑如何避免精度损失和溢出等问题。在稀疏矩阵的加、减、乘运算中,只考虑非零元素的对应位置的运算,并更新对应的三元组。4.实现稀疏矩阵加、减、乘运算,输出运算结果的三元组表示。原创 2024-01-10 19:59:56 · 857 阅读 · 0 评论 -
实验一 -3 利用串的各种模式匹配算法实现病毒感染检测
利用顺序串实现串的各种模式匹配算法。例如,假设病毒的DNA序列为t=“baa”,患者1的DNA序列为s1=“aaabbaaba”,则感染,患者2的DNA序列为s2=“babbbabcabb”,则未感染。最后进行测试与验证,选择多组病毒DNA序列和患者DNA序列作为测试数据,比较两种算法的执行时间和结果,验证程序的正确性和效率。此外,考虑到DNA序列的特点,我们需要选择适合的字符串匹配算法来确保程序的正确性和效率。(1)定义函数kmp_match(s, p),其中s是患者的DNA序列,p是病毒的DNA序列。原创 2024-01-10 19:54:17 · 1764 阅读 · 0 评论 -
实验一 -2-3:利用顺序栈及环形队列编写停车场管理程序
本停车场管理程序的设计思想是使用顺序栈和环形队列来实现车辆的进出和收费管理。环形队列用于存储进入停车场的车辆信息,包括车牌号、进场时间、停车费用等。通过进栈和出队操作来实现车辆的进出管理,通过计算停车时间和费用来实现收费管理。4.车辆进入停车场时,将车辆信息加入车辆队列中,同时将一个空车位加入空车位栈中。5.车辆离开停车场时,从车辆队列中弹出车辆信息,同时从空车位栈中弹出一个空车位。6.计算车辆的停车时间和费用,根据收费标准计算出车辆的收费金额。4.实现车辆离开停车场函数,包括出队和出栈操作。原创 2024-01-06 22:35:01 · 558 阅读 · 0 评论 -
实验一 -2-2:队列的典型算法实现
在设计环形队列时,需要考虑如何初始化、判断是否为空、进队、出队和释放等操作的具体实现方式。编写一个程序sequeue.cpp,实现环形队列(假设队列中的元素类型ElemType为char)的各种基本运算,并在此基础上设计一个程序完成以下功能。2.初始化队列时,将队头指针和队尾指针都指向数组的起始位置,并清空数组。1.定义环形队列的数据结构,包括队头指针、队尾指针和队列中元素。3.实现判断队列是否非空的函数,用于判断队列是否为空。7.实现释放队列的函数,用于释放队列所占用的内存空间。原创 2024-01-06 22:29:53 · 444 阅读 · 0 评论 -
实验一 -2-1:栈的典型算法实现
本实验的设计思想是使用C++语言实现顺序栈的基本操作,包括初始化、判断是否为空、进栈、出栈和释放等操作。在设计顺序栈时,需要考虑如何初始化、判断是否为空、进栈、出栈和释放等操作的具体实现方式。编写及实现顺序栈的定义及基本操作函数编写一个程序sqstack.cpp,实现顺序栈(假设栈的基本元素类型为char)的各种基本运算,并在此基础上设计一个程序完成下述功能。5.出栈时,将指针指向数组的起始位置,并返回该位置的元素值。3.实现判断栈是否非空的函数,用于判断栈是否为空。6.释放栈时,清空数组和指针即可。原创 2024-01-06 22:21:49 · 476 阅读 · 0 评论 -
实验一 -1-2:利用单链表实现职工信息的综合运算。
具体实现方法为:定义一个Node类型的指针p,依次将a、b、c、d、e赋值给p的data域,将p的next指针指向h,然后将h指向p,实现插入操作。在第4个元素的位置上插入f元素,即找到第4个节点,将f赋值给该节点的data域,然后将该节点的next指针指向原来的第5个节点。删除单链表h的第3个元素,即找到第3个节点,将该节点的next指针指向下下个节点。使用循环遍历链表中的每个节点,并输出每个节点的信息。输出单链表h的第3个元素,即遍历链表并输出第3个节点的数据域。原创 2024-01-06 22:07:22 · 1408 阅读 · 0 评论 -
实验一 -1-1:线性结构典型算法的实现
建立具有5个元素的顺序表L=(a,b,c,d,f),并完成如下操作。2.编程实现将两个有序的线性表进行合并,要求同样的数据元素只出现一次。2.初始化两个有序的线性表A和B,长度分别为lenA和lenB。4.遍历线性表A和B,将不重复的元素依次插入到线性表C中。1.定义线性表的数据结构,包括数据元素和线性表的长度。3.创建一个新的线性表C,长度为lenA+lenB。4.加深对线性表的理解,逐步培养解决实际问题的能力。个元素的数组中的每个元素依次放入到顺序表中,并将。(4)获取元素 a 在线性表中的位置。原创 2024-01-06 21:58:10 · 514 阅读 · 0 评论 -
问题 K: 第11关:递归求解单链表中的平均值
多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。本关任务:利用单链表表示一个整数序列,利用递归的方法计算单链表中各个结点的平均值。对于每组数据分别输出一行,对应链表中的各个结点的平均值,输出保留两位小数。原创 2023-11-25 22:53:01 · 1054 阅读 · 0 评论 -
问题 J: 第10关:递归求解单链表中的结点个数
多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。本关任务:利用单链表表示一个整数序列,利用递归的方法计算单链表中结点的个数。对于每组数据分别输出一行,对应链表中的各个结点个数。原创 2023-11-25 22:51:26 · 1429 阅读 · 0 评论 -
问题 I: 第9关:递归求解单链表中的最大值
多组数据,每组数据有两行,第一行为链表的长度n,第二行为链表的n个元素(元素之间用空格分隔)。当n=0时输入结束。本关任务:利用单链表表示一个整数序列,利用递归的方法求出单链表中整数的最大值。对于每组数据分别输出一行,输出每个链表的最大值。原创 2023-11-25 22:49:35 · 1338 阅读 · 0 评论 -
问题 H: 第8关:Ackermann函数的非递归求值
[][原创 2023-11-25 22:47:47 · 1097 阅读 · 0 评论 -
问题 G: 第7关:Ackermann函数的递归求值
多组数据,每组数据有一行,为两个整数m和n。当m和n都等于0时,输入结束。每组数据输出一行,为Ack(m,n)。写出计算Ack(m,n)的递归算法。原创 2023-11-25 22:45:56 · 1290 阅读 · 0 评论 -
问题 F: 第6关:基于栈的可操作判断
本关任务:假设I和O分别代表入栈和出栈操作。栈的始态和终态均为空。入栈和出栈的操作序列可以表示为仅由I和O组成的序列,称可操作的序列为合法序列,否则称为非法序列。请设计一个算法,判断所给的操作序列是否合法。若合法输出“true”,反之输出“false”。多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。多组数据,每组数据为一行长度不定的操作序列A。当A为“0”时,输入结束。原创 2023-11-25 22:44:15 · 1112 阅读 · 0 评论 -
问题 E: 第5关:基于栈的后缀算术表达式求值
本关任务:从键盘上输入一个后缀表达式,试编写算法计算表达式的值。规定:后缀表达式的长度不超过一行,以“=”作为输入结束,操作数之间用空格分隔,操作符只可能有+、?多组数据,每组数据一行,对应一个后缀算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。对于每组数据输出一行,为表达式的运算结果。原创 2023-11-25 22:42:05 · 1149 阅读 · 0 评论 -
问题 D: 第4关:基于栈的中缀算术表达式求值
本关任务:输入一个中缀算术表达式,求解表达式的值。运算符包括+、-、*、/、(、)、=,参加运算的数为double类型且为正数。(要求:直接针对中缀算术表达式进行计算,不能转换为后缀或前缀表达式再进行计算,只考虑二元运算即可。多组数据,每组数据一行,对应一个算术表达式,每个表达式均以“=”结尾。当表达式只有一个“=”时,输入结束。参加运算的数为double类型。对于每组数据输出一行,为表达式的运算结果。原创 2023-11-25 22:40:47 · 661 阅读 · 0 评论 -
问题 C: 第3关:入栈和出栈的基本操作
本关任务:输入一个整数序列a1,a2,a3...,an。当ai不等于-1时将ai进栈;当ai=-1时,输出栈顶元素并将其出栈。对于每一组数据输出若干行。每行为相应的出栈元素。当出栈异常时,输出“POP ERROR”并结束本组数据的输出。多组数据,每组数据有两行,第一行为序列的长度n,第二行为n个整数,整数之间用空格分隔。当n=0时输入结束。原创 2023-11-25 22:38:53 · 946 阅读 · 0 评论 -
问题 B: 第2关:基于栈的回文字符序列判断
本关任务:回文序列是正反读均相同的字符序列,如“abba”和“abdba”均是回文,但是“good”不是回文。请设计一个算法判定给定的字符序列是否为回文。多组数据,每组数据有一行。每一行为一个长度不定的字符序列A。当A为“0”时,输入结束。对于每组数据输出一行。若字符序列A是回文序列,则输出“YES”,否则输出“NO”原创 2023-11-25 22:36:03 · 440 阅读 · 0 评论 -
问题 A: 第1关:双栈的基本操作
第一行代表进栈操作完成时栈是否为满(出栈操作尚未执行),栈满输出1,栈不满输出0。第三行包括d1+1个整数,其中前d1个整数代表出栈序列D1,最后一个整数代表出栈操作完成时1号栈是否为空,栈空输出0,不空输出1。第一行为一个整数m,表示数组V的大小,第二行为四个整数e0、e1、d0、d1,e0和e1分别代表压入0号栈和1号栈的整数序列E0和E1的长度(依次连续入栈,中间没有出栈的情况),d0和d1分别代表从0号栈和1号栈弹出的序列的长度(依次连续出栈,中间没有入栈的情况)。当m=0时,输入结束。原创 2023-11-25 22:32:40 · 509 阅读 · 0 评论 -
李春葆 上机实验题4——实验题3:实现顺序串的各种模式匹配算法
本实验旨在通过编写一个程序实现顺序串的各种模式匹配运算,包括建立目标串和模式串、简单匹配算法、KMP算法以及改进的KMP算法等。通过这个实验,希望学生能够深入理解模式匹配算法的原理和实现方式,并且掌握模式匹配算法的设计和实现技巧。使用KMP算法,通过循环遍历目标串s和模式串t,比较每个字符是否相等。使用简单匹配算法,通过循环遍历目标串s和模式串t,比较每个字符是否相等。改进的KMP算法是在KMP算法的基础上,通过记录已经比较过的字符的下一个字符来优化nextval数组的计算。1.建立目标串s和模式串t。原创 2023-11-15 17:56:55 · 908 阅读 · 1 评论 -
李春葆 上机实验题4——实验题2:实现链串的各种基本运算的算法
本实验旨在通过编写一个程序实现链串的各种基本运算,包括建立链串、输出链串、获取链串长度、插入链串、删除字符、替换字符、提取字符以及连接链串等操作。(1)建立串s="abcdefghijklmn"和和串s1“xyz"(8)将串s从第2个字符开始的5个字符替换成串s1而产生串s2。(10)提取串s从第2个字符开始的10个字符而产生串s3。(4)在串s的第9个字符的位置插入串s1而产生串s2。(6)删除串s从第2个字符开始的5个字符而产生串s2。(12)将串s1和串s2连接起来而产生串s4。(13)输出串s4。原创 2023-11-15 17:51:00 · 964 阅读 · 1 评论 -
李春葆 上机实验题4——实验题1:实现顺序串的各种基本运算的算法
本实验旨在通过编写一个程序实现顺序串的各种基本运算,包括建立串、输出串、获取串长度、插入串、删除字符、替换字符、提取字符以及连接串等操作。(1)建立串s=”abcdefghijklmn”和串s1="xyz”。(8)将串s从第2个字符开始的5个字符替换成串s1而产生串s2。(10)提取串s从第2个字符开始的10个字符而产生串s3。(4)在串s的第9个字符的位置插入串s1而产生串s2。(6)删除串s从第2个字符开始的5个字符而产生串52。(12)将串s1和串s2连接起来而产生串s4。(3)输出串s的长度。原创 2023-11-15 17:42:04 · 2011 阅读 · 0 评论 -
李春葆 上机实验题3——实验题4:实现链队的各种基本运算的算法
本实验旨在通过编写一个程序实现链队的存储结构和各种基本运算的算法,包括初始化、判断链队是否非空、进队、出队、输出出队序列以及释放链队。通过这个实验,希望学生能够深入理解链队数据结构的原理和实现方式,并且掌握链队中各种基本运算算法的设计和实现技巧。首先需要定义链队的结构体,包括一个头指针front和一个尾指针rear,以及一个用于存储队列元素的链表。编写一个程序,实现链队(假设栈中的元素类型 ElemType为char的各种基本运算,并在此基础上设计一个程序完成以下功能。(3)依次进链队元素a、b、c。原创 2023-11-15 17:34:27 · 1263 阅读 · 0 评论 -
李春葆 上机实验题3——实验题3:实现环形队列的各种基本运算的算法
本实验旨在通过编写一个程序实现环形队列的基本操作,包括初始化、判断队列是否非空、进队、出队、输出出队序列以及释放队列,以加深对环形队列数据结构的理解和掌握。编写一个程序,实现环形队列(假设栈中的元素类型 ElemType为char)的各种基本运算,并在此基础上设计一个程序完成以下功能。(4)出队一个元素,输出该元素。(3)依次进队元素a、b、c。(5)依次进队元素d、e、f。(2)判断队列g是否非空。(1)初始化队列q。(6)输出出队序列。原创 2023-11-15 17:29:11 · 1349 阅读 · 0 评论 -
李春葆 上机实验题3——实验题2:实现链栈的各种基本运算的算法
内容:编写一个程序实现链栈(假设栈中的元素类型 ElemType为cha的各种基本运算,并在此基础上设计一个程序完成以下功能。(3)依次进栈元素a、b、c、d、e。(2)判断栈s是否非空。(4)判断栈s是否非空。(6)判断栈s是否非空。(5)输出出栈序列。原创 2023-11-15 17:24:17 · 709 阅读 · 0 评论 -
李春葆 上机实验题2——实验题5:实现循环双链表的各种基本运算的算法
编写一个程序,实现循环双链表的各种基本运算和整体建表算法(假设循环双链表的元素类型ElemType为int),并在此基础上设计一个程序完成以下功能。(8)在第4个元素的位置上插入f元素。(10)删除循环双链表h的第3个元素。(6)输出循环双链表h的第3个元素。(5)判断循环双链表h是否为空。(4)输出循环双链表h的长度。(1)初始化循环双链表h。(11)输出循环双链表h。(12)释放循环双链表h。(3)输出循环双链表h。(7)输出元素a的位置。(9)输出循环双链表h。原创 2023-11-12 17:04:30 · 283 阅读 · 0 评论 -
李春葆 上机实验题2——实验题4:实现循环单链表的各种基本运算的算法
编写一个程序,实现循环单链表的各种基本运算和整体建表算法(假设循环单链表的元素类型ElemType为int),并在此基础上设计一个程序完成以下功能。(2)依次采用尾插法插入a、b、c、d、e元素。(8)在第4个元素的位置上插入f元素。(10)删除循环单链表h的第3个元素。(6)输出循环单链表h的第3个元素。(5)判断循环单链表h是否为空。(4)输出循环单链表h的长度。(1)初始化循环单链表h。(11)输出循环单链表h。(3)输出循环单链表h。(7)输出元素a的位置。(9)输出循环单链表h。原创 2023-11-12 17:00:45 · 316 阅读 · 0 评论 -
李春葆 上机实验题2——实验题3:实现双链表的各种运算的算法
编写一个程序,实现双链表的各种基本运算和整体建表算法(假识双链表的元素类型ElemType为int),并在此基础上设计一个程序完成以下功能。(2)依次采用尾插法插入a、b、c、d、e元素。(8)在第4个元素的位置上插入f元素。(10)删除双链表h的第3个元素。(6)输出双链表h的第3个元素。(5)判断双链表h是否为空。(4)输出双链表h的长度。(7)输出元素a的位置。(1)初始化双链表h。(11)输出双链表h。(12)释放双链表h。(3)输出双链表h。(9)输出双链表h。原创 2023-11-12 16:56:51 · 274 阅读 · 0 评论 -
串的模式匹配
2、假设病毒的DNA序列为t=“abaacba”,某患者的DNA序列为s=“abcaabbabcabaacbacba”,请你利用串结构的相关知识检测该患者是否感染病毒。检测该患者是否感染病毒的实质是进行字符串匹配,即查找患者DNA序列中是否存在病毒的DNA序列。这里进行检测的主串是患者的DNA序列s,模式串是病毒的DNA序列t。(6)利用改进的KMP算法,请计算模式串的nextval数组值。(4)利用没有修正的KMP算法,请计算模式串的next数组值。(7)请根据问题(6)中的nextval数组,画出。原创 2023-11-12 15:47:31 · 157 阅读 · 0 评论 -
李春葆 上机实验题2——实验题1:实现顺序表的各种基本运算
(6)输出顺序表L的第3个元素:这个步骤是为了获取并打印出顺序表中的第三个元素,以展示如何访问顺序表中的特定位置。(8)在第4个元素的位置上插入f元素:这个步骤是为了在顺序表的特定位置插入一个新的元素,并观察对顺序表的影响。(7)输出元素a的位置:这个步骤是为了找出并打印出元素a在顺序表中的位置,以展示如何查找元素的位置。(10)删除顺序表L的第3个元素:这个步骤是为了删除顺序表中的第三个元素,并观察对顺序表的影响。(4)输出顺序表L的长度:这个步骤是为了计算和展示顺序表的长度,这是顺序表的一个重要属性。原创 2023-11-02 14:16:52 · 681 阅读 · 0 评论 -
问题 J: 第10关:基于链存储结构的图书信息表的图书去重
出版社出版的任何一本图书的书号(ISBN)都是唯一的,即图书表中不允许包含书号重复的图书。定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建(书号可能重复),然后进行图书的去重,即删除书号重复的图书(只保留第一本),最后输出去重后所有图书的信息。其中书号和书名为字符串类型,价格为浮点数类型。总计输出m+1行(m≤n),其中,第一行是去重后的图书数目,后m行是去重后图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,其中价格输出保留两位小数。原创 2023-10-30 20:08:33 · 301 阅读 · 0 评论 -
问题 H: 第8关:基于链存储结构的图书信息表的新图书的入库
首先输入n+1行,其中,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后根据指定的待入库的新图书的位置和图书的信息,将新图书插入到图书表中指定的位置上,最后输出新图书入库后的所有图书的信息。若插入成功: 输出新图书入库后所有图书的信息(书号、书名、价格),总计n+1行,每行是一本图书的信息,书号、书名、价格用空格分隔。原创 2023-10-30 19:56:38 · 313 阅读 · 0 评论