实验:数据结构与算法
- 格式:doc
- 大小:186.50 KB
- 文档页数:47
数据结构与算法实验报告一、实验目的1.学习并掌握线性表的链式存储结构和链表的基本操作;2.掌握链表的插入、删除、查找等基本操作算法的实现;3.了解链表的应用场景。
二、实验内容与过程本次实验主要包括以下实验内容:1.链表的定义与建立;2.链表的插入操作;3.链表的删除操作;4.链表的查找操作;5.链表的遍历操作;6.链表的逆序操作;7.链表的合并操作。
实验过程如下:1.链表的定义与建立首先,我们定义一个链表的结构,其中包括节点的定义,节点的数据域和指针域。
节点的数据域存放具体的数据,指针域用于指向下一个节点。
```typedef struct Nodeint data;struct Node* next;} Node;```然后,我们定义链表的头指针,并初始化为空链表。
```Node* head = NULL;```2.链表的插入操作插入操作是指在链表中间或末尾插入一个新节点。
首先,我们创建一个新节点,并为其分配内存空间。
```Node* newNode = (struct Node*) malloc(sizeof(Node));newNode->data = 10;newNode->next = NULL;```然后,我们遍历链表,找到插入位置。
```Node* current = head;while (current->next != NULL)current = current->next;```最后,我们将新节点插入到链表中。
```current->next = newNode;```3.链表的删除操作删除操作是指删除链表中的一些节点。
首先,我们找到要删除的节点的前一个节点。
```Node* current = head;while (current->next != NULL && current->next->data != data) current = current->next;```然后,我们将要删除的节点的指针域赋值给前一个节点的指针域。
数据结构与算法数据结构与算法实验一、实验目的二、实验内容(1)数据结构的实现:例如,链表、栈、队列、树、图等。
学生需要实现这些数据结构的基本操作,如插入、删除、遍历等。
(2)算法设计与分析:例如,排序算法、查找算法、图算法等。
学生需要实现并分析这些算法的时间复杂度和空间复杂度。
(3)实验报告的撰写:学生需要按照实验要求撰写实验报告,包括实验目的、实验内容、实验结果等。
实验报告可以帮助学生更好地总结和理解实验过程中遇到的问题和解决方法。
三、实验要求在进行数据结构与算法实验时,学生需要注意以下几个要求:(1)合理安排时间:数据结构与算法实验需要一定时间来完成,学生需要提前规划好时间,合理安排实验的进行。
(2)认真实验:学生在进行实验时需要认真对待每一步操作,确保实验过程的准确性和完整性。
(3)作业自主完成:学生需要独立完成实验作业,只有通过自己的努力才能够真正掌握数据结构与算法的知识。
(4)及时求助:如果在实验过程中遇到问题,学生应该及时向老师或同学求助,以免耽误实验的进行。
四、实验感想数据结构与算法实验是非常有收获的一门课程。
通过实验,我不仅加深了对数据结构与算法的理解,还学会了如何应用它们来解决实际问题。
实验中我遇到了一些困难,但通过不断的思考和尝试,我最终找到了解决问题的方法。
实验报告的撰写也让我更好地总结和理解实验的过程。
通过实验,我发现数据结构与算法的学习并不是一蹴而就的,需要不断地练习和思考。
只有在实践中才能真正掌握它们。
同时,数据结构与算法实验也锻炼了我的动手能力和解决问题的能力,提高了我的编程水平和分析思维。
总而言之,数据结构与算法实验是一门非常重要和有趣的课程。
通过实验,我们可以更好地理解和应用数据结构与算法,提高自己的编程能力和解决问题的能力。
希望今后我们能够不断地学习和实践,不断提高自己的数据结构与算法水平。
数据结构与算法分析实验报告一、实验目的本次实验旨在通过实际操作和分析,深入理解数据结构和算法的基本概念、原理和应用,提高解决实际问题的能力,培养逻辑思维和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。
操作系统为 Windows 10。
三、实验内容(一)线性表的实现与操作1、顺序表的实现使用数组实现顺序表,包括插入、删除、查找等基本操作。
通过实验,理解了顺序表在内存中的存储方式以及其操作的时间复杂度。
2、链表的实现实现了单向链表和双向链表,对链表的节点插入、删除和遍历进行了实践。
体会到链表在动态内存管理和灵活操作方面的优势。
(二)栈和队列的应用1、栈的实现与应用用数组和链表分别实现栈,并通过表达式求值的例子,展示了栈在计算中的作用。
2、队列的实现与应用实现了顺序队列和循环队列,通过模拟银行排队的场景,理解了队列的先进先出特性。
(三)树和二叉树1、二叉树的遍历实现了先序、中序和后序遍历算法,并对不同遍历方式的结果进行了分析和比较。
2、二叉搜索树的操作构建了二叉搜索树,实现了插入、删除和查找操作,了解了其在数据快速查找和排序中的应用。
(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用邻接矩阵和邻接表来表示图,并比较了它们在存储空间和操作效率上的差异。
2、图的深度优先遍历和广度优先遍历实现了两种遍历算法,并通过对实际图结构的遍历,理解了它们的应用场景和特点。
(五)排序算法的性能比较1、常见排序算法的实现实现了冒泡排序、插入排序、选择排序、快速排序和归并排序等常见的排序算法。
2、算法性能分析通过对不同规模的数据进行排序实验,比较了各种排序算法的时间复杂度和空间复杂度。
四、实验过程及结果(一)线性表1、顺序表在顺序表的插入操作中,如果在表头插入元素,需要将后面的元素依次向后移动一位,时间复杂度为 O(n)。
删除操作同理,在表头删除元素时,时间复杂度也为 O(n)。
数据结构与算法实验报告数据结构与算法实验报告一、引言1.1 背景介绍:介绍数据结构与算法在现代科技领域中的重要性和应用。
1.2 实验目的:明确本实验的目标和需要解决的问题。
1.3 实验内容:详细描述本次实验所使用的数据结构和算法。
1.4 实验方法:阐述实验过程中所采用的步骤和方法。
1.5 实验环境:列出本次实验所使用的硬件和软件环境要求。
二、需求分析2.1 功能需求:详细描述实验所要求实现的功能和效果。
2.2 性能需求:阐述实验对资源利用率和运行效率的要求。
2.3 输入输出需求:明确实验所需输入和期望输出的格式和要求。
三、设计与实现3.1 数据结构设计:给出实验所需的数据结构定义和描述。
3.1.1 数据结构一:介绍数据结构一的定义和特点。
3.1.2 数据结构二:介绍数据结构二的定义和特点。
3.2 算法设计:描述实验所需的算法思路和流程。
3.2.1 算法一:阐述算法一的实现原理和步骤。
3.2.2 算法二:阐述算法二的实现原理和步骤。
3.3 实现过程:详细描述根据设计完成的实现过程。
3.3.1 步骤一:列出实现过程中的第一步骤。
3.3.2 步骤二:列出实现过程中的第二步骤。
3.4 算法优化:对实现过程中的算法进行优化和改进。
3.4.1 优化一:介绍所进行的优化操作和效果。
3.4.2 优化二:介绍所进行的优化操作和效果。
四、实验结果与分析4.1 实验数据:给出实验过程中所使用的测试数据。
4.2 实验结果:列出实验运行的结果和输出。
4.3 结果分析:对实验结果进行详细分析和解释。
五、实验总结5.1 实验心得:总结实验过程中所学到的知识和经验。
5.2 实验收获:列出实验中获得的成果和收获。
六、附件本文档涉及的附件包括但不限于:源代码、输入输出样例、实验数据等。
七、注释本文档中涉及的法律名词及其注释如下:- 法律名词一:注释一。
- 法律名词二:注释二。
数据结构与算法实验报告实验目的:1.加深对链表的理解,掌握链表的基本操作;2.掌握递归算法的设计思想及应用。
实验内容:本次实验主要包括两个部分的实现与测试,分别为链表的基本操作及递归算法的应用。
一、链表的基本操作1.链表的创建链表的创建主要包括新建链表头结点和逐个插入新结点两个步骤。
首先通过malloc函数新建一个链表头结点,并使链表头结点的指针域为空。
然后通过循环输入新节点的数据值,并将新节点插入到链表的尾部。
2.链表的插入链表的插入操作主要包括在链表头部插入新节点、在链表尾部插入新节点和在链表中间插入新节点。
在插入链表头部时,首先通过malloc函数生成新节点,并将链表头节点指针域的原指向设置为新节点;在插入链表尾部时,首先通过循环找到链表的尾节点,并生成新节点,将尾节点指针域的原指向设置为新节点;在插入链表中间时,首先通过循环找到要插入的位置节点,然后生成新节点,并将新节点指针域的原指向设置为下一个节点,将前一个节点的指针域设置为新节点。
3.链表的删除链表的删除操作主要包括删除头节点、删除尾节点和删除中间节点。
在删除头节点时,首先通过free函数释放头节点的内存空间,然后将链表的头节点指针指向第二个节点;在删除尾节点时,首先通过循环找到倒数第二个节点,并将倒数第二个节点的指针域置空,最后通过free函数释放尾节点的内存空间;在删除中间节点时,首先通过循环找到要删除的节点的前一个节点,然后将前一个节点的指针域指向要删除节点的下一个节点,最后通过free函数释放要删除节点的内存空间。
4.链表的查询链表的查询操作主要包括按位置查询和按值查询。
在按位置查询时,通过循环找到指定位置的节点,然后返回节点的数据值;在按值查询时,通过循环比较节点的数据值与指定值,找到匹配的节点,并返回该节点的位置。
二、递归算法的应用递归算法是一种函数自己调用自己的算法设计思想,具有简洁、清晰的特点。
本次实验主要应用递归算法解决实际问题,包括斐波那契数列的求解和二叉树的遍历。
数据结构与算法实验报告实验目的:本次实验主要目的是掌握数据结构与算法的基本概念和实际应用。
通过设计和实现特定的数据结构和算法,加深对其原理和应用的理解,培养分析和解决实际问题的能力。
实验内容:本次实验包括以下几个部分:1\实验环境和工具介绍在本部分,将介绍实验所使用的开发环境和工具,包括操作系统、编程语言、集成开发环境等。
2\实验设计和思路本部分将详细介绍实验的设计思路、算法的选择和实现方式。
具体包括数据结构的选择、算法的设计原理、时间和空间复杂度分析等。
3\实验步骤和代码实现在本部分,将详细列出实验的具体步骤和算法的实现代码。
包括数据结构的定义和操作、算法的实现和测试数据的等。
4\实验结果和分析在本部分,将展示实验的运行结果,并对实验结果进行分析和讨论。
包括实际运行时间、空间占用、算法的优缺点等方面的讨论。
5\实验总结和思考在本部分,将对整个实验进行总结和思考。
包括实验过程中遇到的问题和解决方法,对实验结果的评价,以及对进一步的研究方向的思考等内容。
附件:本文档附带以下附件:1\源代码:包括数据结构的定义和操作,算法的实现等。
2\测试数据:用于验证算法实现的测试数据。
3\实验结果截图:包括算法运行结果、时间和空间占用等方面的截图。
法律名词及注释:1\数据结构:在计算机科学中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。
2\算法:算法是解决问题的一系列清晰而简明的指令,是计算或操作的一种良定义的规程。
3\时间复杂度:时间复杂度是度量算法运行时间长短的一个表达式,用大O符号表示。
4\空间复杂度:空间复杂度是度量算法运行过程中所需的存储空间的一个表达式,用大O符号表示。
结语:本文档详细介绍了数据结构与算法实验的设计思路、步骤和实现代码,并对实验结果进行了分析和讨论。
实验过程中,我们掌握了数据结构与算法的基本概念和实际应用,提高了问题解决能力和编程实践能力。
算法与及数据结构实验报告算法与数据结构实验报告一、实验目的本次算法与数据结构实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见算法和数据结构的基本原理、特性和应用,提高我们解决实际问题的能力和编程技巧。
二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。
同时,为了进行算法性能的分析和比较,使用了 Python 的 time 模块来计算程序的运行时间。
三、实验内容1、线性表的实现与操作顺序表的实现:使用数组来实现顺序表,并实现了插入、删除、查找等基本操作。
链表的实现:通过创建节点类来实现链表,包括单向链表和双向链表,并完成了相应的操作。
2、栈和队列的应用栈的实现与应用:用数组或链表实现栈结构,解决了表达式求值、括号匹配等问题。
队列的实现与应用:实现了顺序队列和循环队列,用于模拟排队系统等场景。
3、树结构的探索二叉树的创建与遍历:实现了二叉树的先序、中序和后序遍历算法,并对其时间复杂度进行了分析。
二叉搜索树的操作:构建二叉搜索树,实现了插入、删除、查找等操作。
4、图的表示与遍历邻接矩阵和邻接表表示图:分别用邻接矩阵和邻接表来存储图的结构,并对两种表示方法的优缺点进行了比较。
图的深度优先遍历和广度优先遍历:实现了两种遍历算法,并应用于解决路径查找等问题。
5、排序算法的比较插入排序、冒泡排序、选择排序:实现了这三种简单排序算法,并对不同规模的数据进行排序,比较它们的性能。
快速排序、归并排序:深入理解并实现了这两种高效的排序算法,通过实验分析其在不同情况下的表现。
6、查找算法的实践顺序查找、二分查找:实现了这两种基本的查找算法,并比较它们在有序和无序数据中的查找效率。
四、实验步骤及结果分析1、线性表的实现与操作顺序表:在实现顺序表的插入操作时,如果插入位置在表的末尾或中间,需要移动后续元素以腾出空间。
删除操作同理,需要移动被删除元素后面的元素。
在查找操作中,通过遍历数组即可完成。
数据结构与算法的实验报告数据结构与算法第二次实验报告电子105班赵萌2010021526实验二:栈和队列的定义及基本操作一、实验目的:. 熟练掌握栈和队列的特点. 掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用. 掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用, 掌握环形队列的入队和出队等基本操作. 加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力二、实验内容:定义顺序栈,完成栈的基本操作:空栈、入栈、出栈、取栈顶元素;实现十进制数与八进制数的转换;定义链式队列,完成队列的基本操作:入队和出队;1.问题描述:(1)利用栈的顺序存储结构,设计一组输入数据(假定为一组整数),能够对顺序栈进行如下操作:. 初始化一个空栈,分配一段连续的存储空间,且设定好栈顶和栈底;. 完成一个元素的入栈操作,修改栈顶指针;. 完成一个元素的出栈操作,修改栈顶指针;. 读取栈顶指针所指向的元素的值;. 将十进制数N 和其它d 进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除d 取余法。
例如:(1348)10=(2504)8N N div 8 N mod 81348 168 4168 21 021 2 52 0 2从中我们可以看出,最先产生的余数4 是转换结果的最低位,这正好符合栈的特性即后进先出的特性。
所以可以用顺序栈来模拟这个过程。
以此来实现十进制数与八进制数的转换; . 编写主程序,实现对各不同的算法调用。
(2)利用队列的链式存储结构,设计一组输入数据(假定为一组整数),能够对链式队列进行如下操作:. 初始化一个空队列,形成一个带表头结点的空队;. 完成一个元素的入队操作,修改队尾指针;. 完成一个元素的出队操作,修改队头指针;. 修改主程序,实现对各不同的算法调用。
其他算法的描述省略,参见实现要求说明。
2.实现要求:对顺序栈的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。
算法与数据结构实验报告算法与数据结构实验报告1.引言该实验报告旨在介绍算法与数据结构实验的设计、实施和结果分析。
本章节将概述实验的背景和目的。
2.实验设计2.1 实验背景在本节中,我们将介绍该实验的背景和应用领域,以便读者能够更好地理解实验的重要性。
2.2 实验目的在本节中,我们将详细介绍该实验的目的和预期的成果,以便读者明确实验的研究问题和目标。
3.算法与数据结构概述3.1 算法定义在本节中,我们将简要介绍算法的概念,并讨论其在实验中的应用。
3.2 数据结构定义本节将简要介绍数据结构的概念,并说明其在算法中的作用。
4.算法实现4.1 实验环境和工具本节将介绍实验所使用的环境和工具,包括编程语言、开发平台和相关库。
4.2 算法逻辑设计在本节中,我们将详细描述所选算法的逻辑设计,包括输入、处理和输出过程。
4.3 数据结构设计本节将详细介绍所选算法中使用的数据结构设计,包括数组、链表、栈等。
4.4 算法实现步骤在本节中,我们将逐步介绍算法的实现步骤,包括代码编写和算法调试。
5.实验结果与分析5.1 实验数据收集在本节中,我们将详细介绍实验数据的收集以及所采用的评估指标。
5.2 实验结果展示本节将展示实验结果的统计数据、图表和其他可视化形式,以便读者更好地理解实验结果。
5.3 结果分析在本节中,我们将对实验结果进行分析,讨论其优势、局限性以及可能的改进方向。
6.总结与展望6.1 实验总结本节将对整个实验过程进行总结,并概括实验的主要发现和成果。
6.2 实验展望在本节中,我们将探讨实验结果的未来发展方向,并提出后续研究的建议和展望。
附件:1.数据集:包含实验中使用的原始数据集2.源代码:包含实验所编写的算法代码和实现注释:1.算法:指计算机科学中用来解决问题的可执行指令序列。
2.数据结构:指组织和存储数据的方式,以便能够高效地访问和处理。
《数据结构与算法》实验提交实验结果的要求:实验完成后,将文件夹中的Debug文件夹删除,然后将整个文件夹打包成压缩文件,并以“学号姓名”的方式重命名,提交该压缩包。
实验1:VC环境的面向对象程序设计实验目的:掌握VC环境下面向对象编程的基本步骤实验准备:1. 复习面向对象程序设计的有关概念2. 阅读VC有关编程操作的说明实验步骤及要求:按照实验指导教师的指导,逐条完成以下要求:1. 启动VC,新建空的控制台工程myproj,新建C++源程序文件main,查看目前文件夹中有哪些文件2. 新建一个名为CA的类,查看文件夹中新添了哪些文件3. 为CA类添加1个int型私有数据成员x和1个char*型私有数据成员y4. 在CA类的构造函数中添加代码,令x赋值为0,y赋值为空指针5. 在CA类的析构函数中添加代码:如果y不是空指针,则释放y所指向的内存区域6. 为CA增加带int型和char*型双参数的构造函数,在代码部分令x赋值为int型参数,令y指向动态申请的内存空间(字节数为char*型参数所指字符串的串长加1),并将char*型参数所指字符串复制到新申请的空间中7. 为CA类增加函数成员Display,用于显示x的值和y所向的指字符串8. 编写下面的主函数,添加相应的#include预处理命令,并编译、运行程序:void main( ){CA a,b(12,"abcdefg");a.Display( );b.Display( );}9. 在主函数main中添加以下三行:a=b;a.Display( );b.Display( );再运行可发现正确显示了信息后程序运行出错,请说明原因。
10. 为CA类重载赋值运算符“=”,在其中对指针型数据成员y重新申请空间并做字符串复制。
再次编译、运行程序,观察是否出错。
11. 为CA类建立拷贝构造函数,实现深拷贝,代码与重载赋值运算符“=”基本相同(不需要return语句)。
再次编译、运行程序,观察是否出错。
12. 为CA类重载“+”运算符,做两个对象的加法运算:整数部分相加,字符串部分拼接。
在主函数中增加一个CA 类的对象c ,并在主函数中的“a=b;”语句后面增加一行:c=a+b;在程序的最后增加一行:c.Display( );再次编译、运行程序,观察结果。
实验2:顺序表实验目的:掌握顺序表的基本运算相关算法并编程实现实验准备:1. 阅读以下“用顺序表存储多项式”的方法:一元多项式表现为:0111...a x a x a x a n n n n ++++--用顺序表存储多项式时,一个数据元素由一个用于存储系数的实型分量coe(coefficient)和一个用于存储指数的整型分量exp(exponent)构成,在顺序表中只存储coe 和exp 即可表示多项式的一项。
例如,多项式43225--+x x x在顺序表中依次存放(2,5)、(3,2)、(-1,1)、(-4,0)共4个元素即可。
注意,系数为0的项不存储,各个数据元素必须按指数降序排列。
2. 阅读、理解以下算法:顺序表的遍历、两个多项式相加3. 将压缩包ex02.rar 中的内容解压,双击文件夹中的dsw 工程文件。
当前工程中包含三个文件:关于类与类型定义的SeqList.h 、类的函数成员SeqList.cpp 、主函数文件main.cpp 。
查看各个文件中的内容。
实验步骤及要求:1. 针对存储多项式的顺序表,修改SeqList.h 中的类型定义SeqNode ,使其符合多项式的存储要求。
2. 为CSeqList 类增加Display 方法,用于显示一个多项式。
3. 为CSeqList 类重载“+”,实现多项式加法。
4. 去掉主函数main 中各语句的注释符号,使得各条语句可以正确执行。
//以下是关于数据元素的类型定义,请根据实际情况修改typedef struct datatype{double coe; //存放系数int exp; //存放指数} DataType;typedef DataType SeqNode;//以下是关于SeqList类型的声明class CSeqList{public:friend CSeqList operator+(const CSeqList &x , const CSeqList &y);void Display();virtual bool DeleteData(int i); //删除顺序表的第i号元素virtual bool GetData(int i,SeqNode *q); //取顺序表的第i号元素,存放到q所指向的位置virtual void Empty(); //将当前顺序表置为空表virtual bool InsertData(SeqNode x,int i); //将新元素x插入到顺序表的第i号位置virtual void InputData();CSeqList& operator=(const CSeqList &x); //重载赋值运算符virtual int GetLength(); //取表长virtual bool IsFull(); //判断表是否已满virtual bool IsEmpty(); //判断表是否为空CSeqList(int maxlen);CSeqList(CSeqList &x); //拷贝构造函数virtual ~CSeqList();private:int m_MaxLength; //最大表长int m_CurLength; //当前表长SeqNode *m_List; //初始化时指向申请的空间,存放表的各个元素};#include "SeqList.h"#include "iostream.h"#include "windows.h"#include "math.h"//构造函数CSeqList::CSeqList(int maxlen){if(maxlen<=0){cout<<"构造函数创建顺序表失败:表中最多存储元素数量必须是正数\n";exit(1);}m_List=new SeqNode[maxlen];if(m_List==NULL){cout<<"构造函数创建顺序表失败:内存空间不够\n";exit(1);}m_CurLength=0;m_MaxLength=maxlen;}//拷贝构造函数CSeqList::CSeqList(CSeqList &x){int i;m_MaxLength=x.m_MaxLength;m_List=new SeqNode[m_MaxLength];if(m_List==NULL){cout<<"拷贝构造函数创建顺序表失败:内存空间不够\n";exit(1);}m_CurLength=x.m_CurLength;for(i=0;i<m_CurLength;i++)m_List[i]=x.m_List[i];}//析构函数,清理内存CSeqList::~CSeqList(){delete m_List;}//判空bool CSeqList::IsEmpty(){return m_CurLength==0;}//判满bool CSeqList::IsFull(){return m_CurLength==m_MaxLength;}//取表长int CSeqList::GetLength(){return m_CurLength;}//从键盘输入数据存入顺序表中void CSeqList::InputData(){int x1,x2;cout<<"请每次输入系数和指数,用空格分隔,输入两个值均<0表示输入结束\n";while(m_CurLength<m_MaxLength){cout<<"List["<<m_CurLength<<"] : ";x1=x2=-1;cin>>x1;cin>>x2; //输入两个数值if(x1<0 && x2<0)break; //如果两个值都<0则表示输入完毕m_List[m_CurLength].coe=x1;m_List[m_CurLength].exp=x2; //否则将这两个值存入顺序表m_CurLength++;}}//重载赋值运算符CSeqList& CSeqList::operator =(const CSeqList& x){int i;m_MaxLength=x.m_MaxLength;m_List=new SeqNode[m_MaxLength];if(m_List==NULL){cout<<"=重载时创建顺序表失败:内存空间不够\n";exit(1);}m_CurLength=x.m_CurLength;for(i=0;i<m_CurLength;i++)m_List[i]=x.m_List[i];return *this;}//将新元素x插入到顺序表的第i号位置bool CSeqList::InsertData(SeqNode x, int i){int j,k=GetLength();if(IsFull() || i<0 || i>k+1)return false;for(j=k;j>i;j--)m_List[j]=m_List[j-1];m_List[i]=x;m_CurLength++;return true;}/将当前顺序表置为空表void CSeqList::Empty(){m_CurLength=0;}//取顺序表的第i号元素,存放到q所指向的位置bool CSeqList::GetData(int i, SeqNode *q){int k=GetLength();if(i<0 || i>=k)return false;*q=m_List[i];return true;}//删除顺序表的第i号元素bool CSeqList::DeleteData(int i){int j,k=GetLength();if(i<0 || i>=k)return false;for(j=i;j<k-1;j++)m_List[j]=m_List[j+1];m_CurLength--;return true;}//以下为新增函数void CSeqList::Display(){int i;if(m_CurLength==0)cout<<"该顺序表为空表";else{for(i=0;i<m_CurLength;i++){//显示系数cout<<' '; //系数前面先显示一个空格if(m_List[i].coe<0) //系数为负数,直接显示{if(m_List[i].exp==1 && fabs(m_List[i].coe+1)<1e-10) //-1X^1显示成-Xcout<<"-";elsecout<<m_List[i].coe;}else{if(i>0) //如果不是最前面一项,则显示'+'[cout<<'+';if(m_List[i].exp!=1 || fabs(m_List[i].coe-1)>1e-10) //系数和指数均为1,不显示系数cout<<m_List[i].coe;}//显示“X^指数”if(m_List[i].exp>0){if(m_List[i].exp==1)cout<<"X";elsecout<<"X^"<<m_List[i].exp;}}}cout<<endl<<endl;}CSeqList operator +(const CSeqList &x , const CSeqList &y){int i,j,k,m;SeqNode p;k=y.m_MaxLength;if(k<x.m_MaxLength)k=x.m_MaxLength; //最大表长取两个表中较大的一个CSeqList z(k);i=j=m=0;while(i<x.m_CurLength && j<y.m_CurLength) //两个表都未处理完时{if(m>k) //相加后的表长超过最大表长{cout<<"重载+时两表相加超过最大表长限制\n";exit(1);}if(x.m_List[i].exp>y.m_List[j].exp)z.InsertData(x.m_List[i++],m++); //将指数大的x表中第i项添加到z 中else if(x.m_List[i].exp<y.m_List[j].exp)z.InsertData(y.m_List[j++],m++); //将指数大的y表中第j项添加到z 中else{p.coe=x.m_List[i].coe+y.m_List[j].coe;p.exp=x.m_List[i].exp;if(fabs(p.coe)>1e-10)z.InsertData(p,m++);i++;j++;}}return z;}#include "iostream.h"#include "seqlist.h"void main(){CSeqList list1(100),list2(100),list3(100);list1.InputData();list1.Display();list2.InputData();list2.Display();list3=list1+list2;list3.Display();}实验3 链表实验目的:掌握单链表的基本运算相关算法并编程实现实验准备:1. 阅读、理解以下算法:单链表的遍历、两个单链表的合并、在单链表中删除重复元素、单链表的排序(冒泡排序法)2. 将压缩包ex03.rar中的内容解压,双击文件夹中的dsw工程文件。