数据结构实验2020
数据结构 实验

数据结构实验数据结构实验1. 实验目的通过本次实验,掌握数据结构的基本概念,了解常见的数据结构和其应用。
2. 实验内容本次实验主要包括以下内容:1. 数组:了解数组的概念、特点和基本操作;掌握数组的存储方式和访问方法;基于数组实现常见数据结构(如栈、队列)。
2. 链表:理解链表的概念及其不同类型(如单向链表、双向链表);学习链表的插入、删除和查找操作;比较链表和数组的优缺点。
3. 树:了解树的基本概念及其特点;学习树的存储方式和遍历方法;掌握二叉树的特点和基本操作(如插入、删除、查找)。
4. 图:理解图的基本概念和相关术语;学习图的存储方式和遍历方法;掌握图的常见算法(如深度优先搜索、广度优先搜索)。
3. 实验步骤根据实验内容,按以下步骤进行实验:3.1 数组1. 了解数组的概念和特点,例如数组是一种线性表数据结构,用于存储连续的元素。
2. 学习数组的基本操作,如创建数组、访问数组元素、修改数组元素的值。
3. 理解数组的存储方式,例如元素在内存中是连续存储的。
4. 实现栈和队列的基本功能,并使用数组作为底层数据结构。
3.2 链表1. 理解链表的概念及其不同类型,如单向链表和双向链表。
2. 学习链表的插入、删除和查找操作,例如在链表中插入一个节点、删除一个节点、查找指定值的节点。
3. 比较链表和数组的优缺点,例如链表的插入和删除操作效率更高,但访问元素的效率较低。
4. 实现链表的基本功能,如创建链表、插入节点、删除节点、查找节点。
3.3 树1. 了解树的基本概念和特点,如树由节点和边组成,每个节点最多有一个父节点和多个子节点。
2. 学习树的存储方式,如链式存储和数组存储。
3. 掌握二叉树的特点和基本操作,如二叉树是每个节点最多有两个子节点的树结构。
4. 实现二叉树的基本功能,如插入节点、删除节点、查找节点。
3.4 图1. 理解图的基本概念和相关术语,如图由顶点和边组成。
2. 学习图的存储方式,如邻接矩阵和邻接表。
数据结构实验报告2篇

数据结构实验报告数据结构实验报告精选2篇(一)实验目的:1. 熟悉数据结构的基本概念和基本操作;2. 掌握线性表、栈、队列、链表等经典数据结构的实现方法;3. 掌握数据结构在实际问题中的应用。
实验内容:本次实验主要包括以下几个部分:1. 线性表的实现方法,包括顺序表和链表,分别使用数组和链表来实现线性表的基本操作;2. 栈的实现方法,包括顺序栈和链式栈,分别使用数组和链表来实现栈的基本操作;3. 队列的实现方法,包括顺序队列和链式队列,分别使用数组和链表来实现队列的基本操作;4. 链表的实现方法,包括单链表、双链表和循环链表,分别使用指针链、双向链和循环链来实现链表的基本操作;5. 综合应用,使用各种数据结构来解决实际问题,例如使用栈来实现括号匹配、使用队列来实现马铃薯游戏等。
实验步骤及结果:1. 线性表的实现方法:a) 顺序表的基本操作:创建表、插入元素、删除元素、查找元素等;b) 链表的基本操作:插入节点、删除节点、查找节点等;c) 比较顺序表和链表的优缺点,分析适用场景。
结果:通过实验,确认了顺序表适用于频繁查找元素的情况,而链表适用于频繁插入和删除节点的情况。
2. 栈的实现方法:a) 顺序栈的基本操作:进栈、出栈、判空、判满等;b) 链式栈的基本操作:进栈、出栈、判空、判满等。
结果:通过实验,掌握了栈的基本操作,并了解了栈的特性和应用场景,例如括号匹配。
3. 队列的实现方法:a) 顺序队列的基本操作:入队、出队、判空、判满等;b) 链式队列的基本操作:入队、出队、判空、判满等。
结果:通过实验,掌握了队列的基本操作,并了解了队列的特性和应用场景,例如马铃薯游戏。
4. 链表的实现方法:a) 单链表的基本操作:插入节点、删除节点、查找节点等;b) 双链表的基本操作:插入节点、删除节点、查找节点等;c) 循环链表的基本操作:插入节点、删除节点、查找节点等。
结果:通过实验,掌握了链表的基本操作,并了解了链表的特性和应用场景。
数据结构实训实验报告

一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。
为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。
二、实验目的1. 掌握常见数据结构(如线性表、栈、队列、树、图等)的定义、特点及操作方法。
2. 熟练运用数据结构解决实际问题,提高算法设计能力。
3. 培养团队合作精神,提高实验报告撰写能力。
三、实验内容本次实验主要包括以下内容:1. 线性表(1)实现线性表的顺序存储和链式存储。
(2)实现线性表的插入、删除、查找等操作。
2. 栈与队列(1)实现栈的顺序存储和链式存储。
(2)实现栈的入栈、出栈、判断栈空等操作。
(3)实现队列的顺序存储和链式存储。
(4)实现队列的入队、出队、判断队空等操作。
3. 树与图(1)实现二叉树的顺序存储和链式存储。
(2)实现二叉树的遍历、查找、插入、删除等操作。
(3)实现图的邻接矩阵和邻接表存储。
(4)实现图的深度优先遍历和广度优先遍历。
4. 算法设计与应用(1)实现冒泡排序、选择排序、插入排序等基本排序算法。
(2)实现二分查找算法。
(3)设计并实现一个简单的学生成绩管理系统。
四、实验步骤1. 熟悉实验要求,明确实验目的和内容。
2. 编写代码实现实验内容,对每个数据结构进行测试。
3. 对实验结果进行分析,总结实验过程中的问题和经验。
4. 撰写实验报告,包括实验目的、内容、步骤、结果分析等。
五、实验结果与分析1. 线性表(1)顺序存储的线性表实现简单,但插入和删除操作效率较低。
(2)链式存储的线性表插入和删除操作效率较高,但存储空间占用较大。
2. 栈与队列(1)栈和队列的顺序存储和链式存储实现简单,但顺序存储空间利用率较低。
(2)栈和队列的入栈、出队、判断空等操作实现简单,但需要考虑数据结构的边界条件。
3. 树与图(1)二叉树和图的存储结构实现复杂,但能够有效地表示和处理数据。
数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中重要的基础课程,通过本次实验,旨在深入理解和掌握常见数据结构的基本概念、操作方法以及在实际问题中的应用。
具体目的包括:1、熟练掌握线性表(如顺序表、链表)的基本操作,如插入、删除、查找等。
2、理解栈和队列的特性,并能够实现其基本操作。
3、掌握树(二叉树、二叉搜索树)的遍历算法和基本操作。
4、学会使用图的数据结构,并实现图的遍历和相关算法。
二、实验环境本次实验使用的编程环境为具体编程环境名称,编程语言为具体编程语言名称。
三、实验内容及步骤(一)线性表的实现与操作1、顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。
实现顺序表的初始化、插入、删除和查找操作。
2、链表的实现定义链表的节点结构,包含数据域和指针域。
实现链表的创建、插入、删除和查找操作。
(二)栈和队列的实现1、栈的实现使用数组或链表实现栈的数据结构。
实现栈的入栈、出栈和栈顶元素获取操作。
2、队列的实现采用循环队列的方式实现队列的数据结构。
完成队列的入队、出队和队头队尾元素获取操作。
(三)树的实现与遍历1、二叉树的创建以递归或迭代的方式创建二叉树。
2、二叉树的遍历实现前序遍历、中序遍历和后序遍历算法。
3、二叉搜索树的操作实现二叉搜索树的插入、删除和查找操作。
(四)图的实现与遍历1、图的表示使用邻接矩阵或邻接表来表示图的数据结构。
2、图的遍历实现深度优先遍历和广度优先遍历算法。
四、实验结果与分析(一)线性表1、顺序表插入操作在表尾进行时效率较高,在表头或中间位置插入时需要移动大量元素,时间复杂度较高。
删除操作同理,在表尾删除效率高,在表头或中间删除需要移动元素。
2、链表插入和删除操作只需修改指针,时间复杂度较低,但查找操作需要遍历链表,效率相对较低。
(二)栈和队列1、栈栈的特点是先进后出,适用于函数调用、表达式求值等场景。
入栈和出栈操作的时间复杂度均为 O(1)。
2、队列队列的特点是先进先出,常用于排队、任务调度等场景。
数据结构实验报告

数据结构实验报告一、实验目的本实验旨在通过对数据结构的学习和实践,掌握基本的数据结构概念、原理及其应用,培养学生的问题分析与解决能力,提升编程实践能力。
二、实验背景数据结构是计算机科学中的重要基础,它研究数据的存储方式和组织形式,以及数据之间的关系和操作方法。
在软件开发过程中,合理选用和使用数据结构,能够提高算法效率,优化内存利用,提升软件系统的性能和稳定性。
三、实验内容本次实验主要涉及以下几个方面的内容:1.线性表的基本操作:包括线性表的创建、插入、删除、查找、修改等操作。
通过编程实现不同线性表的操作,掌握它们的原理和实现方法。
2.栈和队列的应用:栈和队列是常用的数据结构,通过实现栈和队列的基本操作,学会如何解决实际问题。
例如,利用栈实现括号匹配,利用队列实现银行排队等。
3.递归和回溯算法:递归和回溯是解决很多求解问题的常用方法。
通过编程实现递归和回溯算法,理解它们的思想和应用场景。
4.树和二叉树的遍历:学习树和二叉树的遍历方法,包括前序、中序和后序遍历。
通过编程实现这些遍历算法,加深对树结构的理解。
5.图的基本算法:学习图的基本存储结构和算法,包括图的遍历、最短路径、最小生成树等。
通过编程实现这些算法,掌握图的基本操作和应用。
四、实验过程1.具体实验内容安排:根据实验要求,准备好所需的编程环境和工具。
根据实验要求逐步完成实验任务,注意记录并整理实验过程中遇到的问题和解决方法。
2.实验数据采集和处理:对于每个实验任务,根据要求采集并整理测试数据,进行相应的数据处理和分析。
记录实验过程中的数据和结果。
3.实验结果展示和分析:将实验结果进行适当的展示,例如表格、图形等形式,分析实验结果的特点和规律。
4.实验总结与反思:总结实验过程和结果,回顾实验中的收获和不足,提出改进意见和建议。
五、实验结果与分析根据实验步骤和要求完成实验任务后,得到了相应的实验结果。
对于每个实验任务,根据实验结果进行适当的分析。
数据结构实验报告(重邮)5个

数据结构实验报告学院:班级:姓名:学号:实验一线性链表的实现与操作题目:设计一个100位以内的长整数加减运算的程序班级:姓名:学号:完成日期:一、需求分析1、本实验中,100位长整数的每位上的数字必须为数字[0——9]之间,长整数的位数并要求100位以内。
测试的时候输入数据,当输入回车键的时候结束输入,如果输入的字符不符合题目要求,则程序能过滤这些不符合要求的字符。
2、演示程序以用户和计算机的对话方式执行,即在计算机显示“提示信息”后之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据(滤去输入中不符合要求的字符)和运算结果显示在其后。
3、程序执行的命令包括:(1)创建第一个整数(100以内);(2)执行加法或者减法;(3)创建第二个整数(100以内);(4)结束。
二、概要设计为实现上述程序功能,可以用链表或者长数组表示长整数,如果用数组表示长整数有个缺点就是长整数不能无限长,而链表能动态开辟空间,它克服了这个缺点,所以次试验用链表来表示长整数。
1、链表的抽象数据类型定义为:ADT Number{数据对象:D={a i| a i∈(0,1,…,9),i=0,1,2,…,n,n≥0}数据关系:R={< a i-1, a i>| a i-1, a i∈D,i=1,2,…,n}基本操作:CreateList(&L)操作结果:创建一个链表L。
PrintList(L)初始条件:链表L已存在。
操作结果:在屏幕上输出链表的值。
PlusList(L1,L2,a)初始条件:链表L1,L2已存在,a为+ or –表示加减。
操作结果:将两链表的值相加然后在屏幕上输出。
DestroyList(&L)初始条件:链表L已存在。
操作结果:销毁链表L。
} ADT Number2、本程序包含五个模块:int main(){定义变量;接受命令;处理命令;return 0;}各模块之间的调用关系如下:+or - :+or -三、详细设计1、定义头文件#include<stdio.h>#include<stdlib.h>#define LEN sizeof(Number)typedef struct number Number;struct number{int data;Number *next;Number *prior;};/////////////////////////////////////////////////////////////////////////////////////////////// ////////void main(){void DestoryList(Number *); //释放链表void PutNumber(Number *); //将求得的结果输出Number *GetNumber(); //创建链表,放被加数与加数Number *JiaFa(Number *num_1,Number *num_2);//加法函数Number *JianFa(Number *num_1,Number *num_2);//减法函数Number *number_1,*number_2,*number;char ch; //存放运算符号printf("Enter the first long number:");number_1=GetNumber();printf("put +or-:");ch=getchar();fflush(stdin); //吸收不相关的字符printf("Enter the second long number:");number_2=GetNumber();if(ch=='+')number=JiaFa(number_1,number_2);elseif(ch=='-')number=JianFa(number_1,number_2);printf("\n=\n");PutNumber(number);DestoryList(number);DestoryList(number_1);DestoryList(number_2);printf("链表释放完成。
数据结构课程实验报告

数据结构课程实验报告一、实验目的。
本次实验旨在通过对数据结构课程所学知识的应用,加深对数据结构相关算法和数据操作的理解,提高学生的编程能力和实际应用能力。
二、实验内容。
1. 实现顺序表、链表、栈、队列等数据结构的基本操作;2. 设计并实现数据结构相关算法,如查找、排序等;3. 进行实验数据的输入、输出和结果展示;4. 对实验结果进行分析和总结。
三、实验过程。
1. 针对顺序表、链表、栈、队列等数据结构,首先进行了相关操作的实现。
在实现过程中,需要考虑数据结构的特点和操作规则,确保操作的正确性和高效性。
2. 针对数据结构相关算法,如查找、排序等,设计并实现了相应的算法。
在实现过程中,需要考虑算法的时间复杂度和空间复杂度,确保算法的效率和稳定性。
3. 进行了实验数据的输入、输出和结果展示。
通过编写测试用例,对实现的数据结构和算法进行了测试,验证其正确性和可靠性。
4. 对实验结果进行了分析和总结。
通过对实验数据和测试结果的分析,总结了实验中遇到的问题和解决方法,以及实验的收获和体会。
四、实验结果。
经过实验测试,实现的数据结构和算法均能正确运行并得到预期的结果。
通过实验,加深了对数据结构相关知识的理解,提高了编程能力和实际应用能力。
五、实验总结。
本次实验使我对数据结构相关知识有了更深入的理解,同时也提高了我的编程能力和实际应用能力。
在未来的学习和工作中,我将继续努力,不断提升自己的能力,为将来的发展打下坚实的基础。
六、实验感想。
通过本次实验,我深刻感受到了数据结构在实际应用中的重要性,也意识到了自己在数据结构方面的不足之处。
在今后的学习和工作中,我将更加努力地学习和应用数据结构知识,不断提高自己的能力,为未来的发展做好充分的准备。
七、参考文献。
1. 《数据结构与算法分析》。
2. 《C语言程序设计》。
3. 《数据结构课程实验指导书》。
以上就是本次数据结构课程实验的报告内容,希望能对大家有所帮助。
感谢您的阅读!。
数据结构实验报告及心得体会

数据结构实验报告及心得体会一、引言数据结构是计算机科学中的重要基础课程,通过实验环节的学习,我们能够更好地掌握和应用数据结构的概念、算法和操作。
本报告旨在总结和分享我们进行的数据结构实验,并提出相应的心得体会。
二、实验一:线性表的实现与应用1. 实验目的本实验旨在通过实现和应用线性表的基本操作,掌握线性表的存储结构和算法。
2. 实验内容我们选择了顺序表和链表两种线性表的实现方式,并实现了插入、删除和查找等基本操作。
通过实验,我们发现顺序表适用于元素个数较少、频繁查找的情况,而链表适用于插入和删除操作较多、元素个数不确定的情况。
3. 实验心得通过实验一,我们深刻认识到数据结构的不同实现方式对算法的影响。
选择合适的数据结构可以提高算法效率,提高程序的性能。
同时,我们也意识到了在实际应用中,根据问题的具体特点选择不同的数据结构才能得到最优解。
三、实验二:栈与队列的应用本实验旨在通过实现和应用栈和队列的基本操作,掌握栈和队列的特性及其在实际应用中的作用。
2. 实验内容我们分别实现了顺序栈、链式栈、顺序队列和链式队列,并实现了入栈、出栈、入队和出队等基本操作。
我们发现栈适用于实现回溯算法、递归算法等,而队列适用于广度优先搜索、线程池等场景。
3. 实验心得通过实验二,我们进一步理解了栈和队列在实际编程中的运用。
它们提供了方便的数据结构,帮助我们解决了许多实际问题。
同时,实验过程中,我们也发现了栈溢出的问题,意识到了合理管理栈空间的重要性。
四、实验三:树与二叉树的实现与应用1. 实验目的本实验旨在通过实现和应用树和二叉树的基本操作,掌握树和二叉树的存储结构和算法。
2. 实验内容我们实现了树和二叉树的基本操作,包括创建、插入、删除和遍历等。
通过实验,我们发现树在表示具有部分层次结构的问题时更合适,而二叉树在表示递归结构时更加方便。
通过实验三,我们深入理解了树和二叉树的特性及其应用。
树和二叉树是许多高级数据结构的基础,熟练掌握它们的操作对于解决实际问题非常重要。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录实验一线性表实验 (1)实验二栈、队列实验 (3)实验三串和数组实验 (5)实验四树实验 (5)实验五图实验 (6)实验六查找表实验 (7)实验七内排序实验 (8)实验一线性表实验【实验目的】1.掌握顺序表、单链表、循环链表、双向链表的构造原理及其基本运算的实现算法。
2.了解线性表的顺序存储和链式存储结构的特点和适用情形。
【实验学时】6学时【实验内容】题目一:编写一个程序,实现顺序表的各种基本运算,并在此基础上设计一个主程序完成如下功能:(1)初始化顺序表L。
(2)依次采用尾插法插入a,b,c,d,e元素。
(3)输出顺序表L及L的长度。
(4)判断顺序表L是否为空。
(5)输出顺序表L的第3个元素。
(6)输出元素d的位置。
(7)在第4个元素位置上插入f元素。
(8)删除L的第3个元素。
(9)输出顺序表L。
(10)释放顺序表L。
题目二:编写一个程序,实现单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:(1)初始化单链表H。
(2)依次采用尾插法插入a,b,c,d,e元素。
(3)输出单链表H及H的长度。
(4)判断单链表H是否为空。
(5)输出单链表H的第3个元素。
(6)输出元素d的位置。
(7)在第4个元素位置上插入f元素。
(8)删除H的第3个元素。
(9)输出单链表L。
(10)释放单链表L。
题目三:编写一个程序,实现双链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:(题目三、四选做1个)(1)初始化双链表H。
(2)依次采用尾插法插入a,b,c,d,e元素。
(3)输出双链表H及H的长度。
(4)判断双链表H是否为空。
(5)输出双链表H的第3个元素。
(6)输出元素d的位置。
(7)在第4个元素位置上插入f元素。
(8)删除H的第3个元素。
(9)输出双链表L。
(10)释放双链表L。
题目四:编写一个程序,实现循环单链表的各种基本运算,并在此基础上设计一个主程序完成如下功能:(1)初始化循环单链表H。
(2)依次采用尾插法插入a,b,c,d,e元素。
(3)输出循环单链表H及H的长度。
(4)判断循环单链表H是否为空。
(5)输出循环单链表H的第3个元素。
(6)输出元素d的位置。
(7)在第4个元素位置上插入f元素。
(8)删除H的第3个元素。
(9)输出循环单链表L。
(10)释放循环单链表L。
实训项目:1.将单链表按某个基准划分。
编写一个程序,以给定值x为基准将单链表分割为两部分,所有小于x的结点排在大于或等于x的结点之前。
并分析时间复杂度。
2.用单链表表示的两个集合(假设同一个集合中不存在重复的元素),求它们的并、交和差运算。
3.实现两个多项式相加运算。
(2、3选做一个)4.用单链表实现两个大整数相加运算。
要求:(选做)(1)将用户输入的十进制整数字符串转化为带头结点的单链表,每个结点存放一个整数位。
(2)求两个整数单链表相加的结果单链表(3)求结果单链表的中间位,如234的中间位是“3”,2345的中间位是“3”。
5.P86的2.18 约瑟夫问题。
6.列车时刻表管理系统案例描述:一个火车要对进出本站的列车信息进行计算机管理,包括建立、增加、删除、查询、修改车次信息等。
列车信息有车次、开点、到点、始发站、终点站等。
已知进出该站的列车车次变化较多。
实验二栈、队列实验【实验目的】1.掌握栈的顺序及链式存储和基本运算的实现方法2.掌握队列的顺序及链式存储和基本运算的实现方法3.了解栈和队列的应用【实验学时】8学时【实验内容】题目一:编写一个程序,实现顺序栈的各种基本运算,并在此基础上设计一个主程序完成如下功能:(1)初始化栈S。
(2)判断栈S是否非空。
(3)依次进栈元素a,b,c,d,e 。
(4)输出栈的长度。
(5)输出从栈顶到栈底的元素。
(6)输出出栈序列。
(7)释放栈。
题目二:编写一个程序,实现循环队列的各种基本运算,并在此基础上设计一个主程序完成如下功能:(1)初始化队列Q。
(2)判断队列Q是否非空。
(3)依次进队列元素a,b,c。
(4)出队一个元素,输出该元素。
(5)输出队列Q的元素个数。
(6)依次进入队列元素d,e,f。
(7)输出出队序列。
(8)释放队列。
要求:其中队列的插入和删除算法按照P134 的3.24改写。
【实训项目】:1.P132:3.10,3.14,3.19。
2.利用栈对只含二目运算符的中缀算术表达式求值,并将该中缀表达式转换为后缀表达式。
算术运算符包括:*、/、+、-,优先级从高到低。
3.用栈求解下图所示迷宫的所有路径,并输出最短路径长度及该最短路径。
4.P133的3.17:八皇后问题,可以用递归方法实现,或者借助栈实现。
(选做)5.病人看病模拟程序编写一个程序,反映病人到医院看病,排队看医生的情况。
在病人排队过程中,主要重复两件事:(1)病人到达诊室,将病历本交给护士,排到等待队列中候诊(2)护士从等待队列中取出下一位病人的病历,该病人进入诊室就诊要求模拟病人等待就诊这一过程。
程序采用菜单方式,其选项及功能说明如下:●排队――输入排队病人的病历号,加入病人排队队列中;●就诊――病人排队队列中最前面的病人就诊,并将其从队列中删除;●查看排队――从对首到队尾列出所有的排队病人的病历号;●不再排队,余下依次就诊――从对首到队尾列出所有的排队病人的病历号,并退出运行;●下班――退出运行。
实验三串和数组实验【实验目的】1.掌握串的顺序存储结构2.掌握串的基本算法及应用3.掌握模式匹配的各种算法4.掌握数组和广义表的基本算法【实验学时】8学时【实验内容】1.采用顺序存储结构存储串,编写一个程序,采用简单模式匹配方法求串s中出现的第一个最长重复子串的下标和长度。
例如:s=“aababcabcdabcde”,最长重复子串为:abcd 2.编写一个程序,利用KMP算法求子串t在主串是中出现的次数,并以s=”aaabbdaabbde”,t=“aabbd”为例,显示其匹配过程。
(匹配过程的显示选做)。
3.实现稀疏矩阵的基本运算。
假设n*n的稀疏矩阵A采用三元组表示,设计一个程序,实现如下功能:(1)生成如下两个稀疏矩阵的三元组a和b;1 0 3 0 3 0 0 00 1 0 0 0 4 0 00 0 1 0 0 0 1 00 0 1 1 0 0 0 2(2)输出a转置矩阵的三元组(3)输出a+b的三元组4.实现广义表的基本运算。
编写一个程序,实现广义表的以下操作,完成以下功能:(1)建立广义表g=(b,(b,a,( ),d),((a,b),c,(( ))))的链式存储结构。
(2)输出广义表g的长度(3)输出广义表g的深度。
5.求一个矩阵中的马鞍点。
如果矩阵A中存在这样的一个元素,满足条件:A[i][j]是第i行中值最小的元素,并且是第j列中值最大的元素,则称之位该矩阵的一个马鞍点。
设计一个程序,求矩阵中所有的马鞍点。
实验四树实验【实验目的】1.掌握二叉树的顺序和链式存储结构2.掌握二叉树的建立、遍历、线索化等基本算法及应用3.掌握哈夫曼树的构造过程和哈夫曼编码方法4.了解树、森林与二叉树的转换算法5.了解哈夫曼编码和解码算法【实验学时】10学时【实验内容】1.编写一个程序,实现二叉树的各种运算,并在此基础上设计一个主程序完成如下功能:图一(1)由如图一所示的二叉树创建其对应的二叉链表存储结构(提示:由二叉树的扩展前序序列构造二叉链表)(2)输出二叉树的中序、先序、后序遍历序列的递归和非递归算法(中序必做,先序和后序选做);(3)输出二叉树B(树形结构或者广义表形式);(选做)(4)输出二叉树中指定结点值(假设所有节点值不同)的左右孩子结点;(5)输出二叉树B的叶子结点个数;(6)输出该二叉树的高度;(7)输出二叉树中指定结点值(假设所有节点值不同)的结点所在的层次;(选做)(8)释放二叉树B。
2.已知一棵树的前序遍历序列和中序遍历序列,试构造这棵二叉树,以P248的5.18验证。
3.P248的5.26,用非递归方式实现,选做。
4.线索化二叉树的操作:(1)编写一个程序实现二叉树的中序线索化,采用递归和非递归方式输出中序线索二叉树的中序序列,并以图(一)所示的二叉树B对程序进行验证;(2)求出该线索化二叉树中给定结点的直接前驱和直接后继结点。
(3)P249 选做 5.31。
5.编写一个程序,构造一棵哈夫曼树,输出对应的哈夫曼编码和平均查找长度,并对表1所示的数据进行验证。
表1 单词及出现的频率【实训项目】:(选做)1.对某大学的信息进行统计内容:编写一个程序,实现大学的数据统计,某大学的组织机构如表所示,该数据存放在文本文件abc.txt 中。
要求采用树的孩子链表存储结构存储它,并完成以下功能:(1)从 abc.txt文件中读数据到R数组中;(2)由数组R创建树t的孩子链存储结构;(3)采用广义表形式输出树t;(4)求计算机学院的专业数量;(5)求计算机学院的班级数量;(6)求电信学院的学生数量;(7)销毁树。
实验五图实验【实验目的】1.掌握图的邻接矩阵、邻接表等存储表示方法2.掌握图的深度优先遍历和广度优先遍历算法3.了解最小生成树、最短路径等问题的求解过程、算法和应用4.了解关键路径、拓扑排序等问题的求解过程和应用【实验学时】2学时【实验内容】题目一:编写一个程序,实现图的相关运算,并在此基础上设计一个主程序完成如下功能:(1)建立图(二)所示的有向图G的邻接矩阵,并(2)由有向图G的邻接矩阵产生邻接表,并输出之。
(3)再由(2)的邻接表产生对应的邻接矩阵,并输出之。
题目二:编写一个程序,实现图的遍历算法,并在此基础上设计一个主程序完成如下功能:(4)输出图(二)的有向图G从顶点V1开始的深度优先遍历序列序列(递归算法)(5)输出如图(二)的有向图G从顶点v1开始的深度优先遍历序列(非递归算法)(6)输出如图(二)的有向图G从顶点v1开始的广度优先遍历序列(选做)【实训项目】子工程建设时间的安排(选做?)现某公司有一计算机机房建设工程,它包含的子工程以及各子工程之间的关系如表2所示。
由于资金和场地等条件限制,这些子工程必须一项一项地进行,不能有并行情况。
请给出一种可行的安排这些子工程建设时间的一个线性序列,按照它的顺序依次进行各个子工程的建设,以顺利完成整个工程。
表2 计算机机房建设工程表实验六查找表实验【实验目的】1.掌握顺序查找、二分查找等算法的思想、查找过程、算法实现及应用2.了解哈希表的构造、哈希函数的构造方法及处理冲突的方法3.了解二叉排序树的构造、查找等算法【实验学时】2学时【实验内容】题目一:编写一个程序,输出在顺序表{3,6,2,10,1,8,5,7,4,9}中采用顺序方法查找关键字5的过程。
题目二:编写一个程序,输出在顺序表{1,2,3,4,5,6,7,8,9,10}中采用二分查找方法查找关键字5的过程。