华科数据结构实验报告
数据结构课程试验报告
数据结构课程实验报告题目:哈夫曼编/译码器班级:电信0608姓名:彭飞学号:012006013517指导老师:刘玉数据结构实验报告华中科技大学电信系2007年12月目录1.需求分析 (1)2.概要设计 (2)2.1抽象数据类型定义 (2)2.2主程序 (2)2.3模块 (2)3.详细设计 (3)3.1哈夫曼编码类型 (3)3.2相关基本操作 (3)3.3主程序伪码算法 (9)3.4函数调用关系图 (11)4.调试分析 (12)5.用户手册 (13)6.测试结果 (14)7.附录 (16)一、需求分析1.哈夫曼编码对象为任意字符,包括数字及各种符号,通过统计用户输入字符串中个关键对象出现次数,建立相应的哈夫曼树。
2.演示程序以用户和计算机的对话方式执行,即在计算机终端上显示“提示信息”,用户由键盘输入数字命令,执行相应命令后显示操作结果。
3.程序执行的命令:1)建立哈夫曼树;2)求哈夫曼编码;3)打印哈夫曼树;4)对哈夫曼编码进行译码,提示用户输入合法编码;4.输入过程中能自动滤去合法字符以外的其他字符,并能在输入不当时输出相应的提示信息。
5.测试数据:1)输入:Hello!world!2)输出:见测试结果。
二、概要设计1.抽象数据类型的定义如下:ADT HuffmanTree{数据对象D:D={ai|ai∈Htnode型结点,i=1,2,…,n,n≥0}数据关系:R={<ai,ai.lchild>,<ai,ai.rchild>|ai∈D,i=2,3,…,n}基本操作:select(HuffmanTree HT,int n,int &s1,int &s2)初始条件:HT已存在。
操作结果:在树HT中的前n个结点中找出权值最小的两个结点分别记录在s1,s2上。
HuffmanCoding(HuffmanTree &HT,Weight *w,int m)初始条件:HT已存在。
华科数据结构二叉树实验报告
华科数据结构二叉树实验报告华中科技大学(以下简称华科)是一所位于中国湖北省武汉市的顶尖高校。
作为计算机科学与技术专业的学生,我们在课程中学习了数据结构这门重要的课程。
在这学期的实验中,我们深入研究了二叉树这一数据结构,并进行了相关实验。
二叉树是一种常见的数据结构,它由节点构成,每个节点最多有两个子节点。
这种树的结构使得我们能够高效地操作和存储数据。
在本次实验中,我们主要关注二叉树的构建和遍历。
在实验的第一部分,我们需要实现一个二叉树的构建算法。
我们使用了C++语言来实现这个算法。
首先,我们定义了一个节点类,它包含了节点的值以及指向左右子节点的指针。
然后,我们编写了一个递归函数来构建二叉树。
这个函数接受一个数组作为输入,并根据数组中的元素构建二叉树。
我们通过递归地调用这个函数来构建每个节点的子树,直到所有的节点都被构建完毕。
在实验的第二部分,我们学习了二叉树的遍历算法。
二叉树的遍历可以分为三种方式:前序遍历、中序遍历和后序遍历。
前序遍历是指先访问根节点,然后按照先左后右的顺序遍历左右子树。
中序遍历是指先遍历左子树,然后访问根节点,最后遍历右子树。
后序遍历是指先遍历左右子树,最后访问根节点。
我们编写了相应的递归函数来实现这些遍历算法,并将遍历结果输出。
在实验的第三部分,我们进行了性能测试。
我们首先生成了一个包含一百万个随机整数的数组,并使用这个数组构建了一个二叉树。
然后,我们分别计算了使用前序、中序和后序遍历算法遍历这个二叉树所需的时间。
结果显示,中序遍历算法是最快的,而后序遍历算法是最慢的。
这是因为中序遍历算法的顺序与二叉树的结构最为吻合,而后序遍历算法需要先遍历左右子树才能访问根节点。
通过这次实验,我们深入了解了二叉树这一数据结构,并学会了如何构建和遍历二叉树。
我们还通过性能测试了解到不同遍历算法的效率差异。
这次实验让我们更加熟悉了数据结构的应用,并提高了我们的编程能力。
总之,通过这次实验,我们对二叉树有了更深入的了解。
华科数据结构二叉树实验报告
华科数据结构二叉树实验报告一、实验目的本实验旨在通过实践操作,加深对数据结构中二叉树的理解,掌握二叉树的基本操作和应用。
二、实验内容1. 实现二叉树的创建和初始化。
2. 实现二叉树的插入操作。
3. 实现二叉树的删除操作。
4. 实现二叉树的查找操作。
5. 实现二叉树的遍历操作:前序遍历、中序遍历、后序遍历。
6. 实现二叉树的层次遍历。
7. 实现二叉树的销毁操作。
8. 进行实验测试,并分析实验结果。
三、实验步骤1. 创建二叉树的数据结构,包括节点的定义和指针的初始化。
2. 实现二叉树的创建和初始化函数,根据给定的数据构建二叉树。
3. 实现二叉树的插入操作函数,将新节点插入到二叉树的合适位置。
4. 实现二叉树的删除操作函数,删除指定节点,并保持二叉树的结构完整。
5. 实现二叉树的查找操作函数,根据给定的值查找对应的节点。
6. 实现二叉树的遍历操作函数,包括前序遍历、中序遍历、后序遍历。
7. 实现二叉树的层次遍历函数,按照层次顺序遍历二叉树。
8. 实现二叉树的销毁操作函数,释放二叉树的内存空间。
9. 编写测试程序,对上述函数进行测试,并分析实验结果。
四、实验结果与分析经过测试,实验结果如下:1. 创建和初始化函数能够正确构建二叉树,并初始化节点的值和指针。
2. 插入操作函数能够将新节点插入到二叉树的合适位置,并保持二叉树的结构完整。
3. 删除操作函数能够正确删除指定节点,并保持二叉树的结构完整。
4. 查找操作函数能够根据给定的值找到对应的节点。
5. 遍历操作函数能够按照指定的顺序遍历二叉树,并输出节点的值。
6. 层次遍历函数能够按照层次顺序遍历二叉树,并输出节点的值。
7. 销毁操作函数能够释放二叉树的内存空间,防止内存泄漏。
根据实验结果分析,二叉树的基本操作和应用都能够正常实现,达到了预期的效果。
五、实验总结通过本次实验,我进一步加深了对数据结构中二叉树的理解,并掌握了二叉树的基本操作和应用。
通过实践操作,我更加熟悉了二叉树的创建、插入、删除、查找和遍历等操作,同时也学会了如何进行层次遍历和销毁二叉树。
华中科技大学-计算机学院-数据结构实验报告
华中科技大学-计算机学院-数据结构实验报告LT目录1基于顺序存储结构实现线性表的基本运算 (1)1.1 实验目的 (1)1.2 线性表演示系统设计 (1)1.2.1 系统总体设计 (1)1.2.2 有关常量和类型定义 (1)1.2.3 算法设计 (1)1.3 线性表演示系统实现与测试 (3)1.3.1 系统实现 (3)1.3.2 系统测试 (11)1.4 实验小结 (12)2 基于链式实现线性表的基本运算 (13)2.1 问题描述 (13)2.2 线性表演示系统设计 (13)2.2.1 系统总体设计 (13)2.2.2 有关常量和类型定义 (13)2.2.3 算法设计 (13)2.3 线性表演示系统实现与测试 (15)2.3.1 系统实现 (15)2.3.2 系统测试 (24)2.4 实验小结 (25)3基于顺序存储结构实现栈的基本运算 (27)3.1实验目的 (27)3.2栈演示系统设计 (27)3.2.1 系统总体设计 (27)3.2.2 算法实现 (27)3.3 栈演示系统实现与测试 (28)3.3.1 程序实现 (28)3.3.2 系统测试 (34)3.4 实验小结 (35)4基于循环队列存储结构实现队列的基本运算 (36)4.1 问题描述 (36)4.2.1 系统总体设计 (36)4.2.2 有关常量和类型定义 (36)4.2.3 算法设计 (36)4.3 队列演示系统实现与测试 (37)4.3.1 系统实现 (37)4.3.2 系统测试 (44)4.4 实验小结 (45)5基于二叉链表实现二叉树的基本运算 (46)5.1 实验目的 (46)5.2.1 系统总体设计 (46)5.2.2 有关常量和类型定义 (46)5.2.3 算法设计 (46)5.3 二叉树演示系统实现与测试 (48)5.3.1 系统实现 (48)5.3.2 系统测试 (79)5.4 实验小结 (81)6基于邻接表实现图的基本和常见运算 (82)6.1 实验目的 (82)6.2.1 系统总体设计 (82)6.2.2 有关常量和类型定义 (82)6.2.3 算法设计 (82)6.3 图演示系统实现与测试 (83)6.3.1 系统实现 (83)6.3.2 系统测试 (101)6.4 实验小结 (103)参考文献 (104)1基于顺序存储结构实现线性表的基本运算1.1 实验目的通过实验达到:(1)加深对线性表的概念、基本运算的理解;(2)熟练掌握线性表的逻辑结构与物理结构的关系;(3)物理结构采用顺序表,熟练掌握线性表的基本运算的实现。
数据结构实验三实验报告
数据结构实验三实验报告数据结构实验三实验报告一、实验目的本次实验的目的是通过实践掌握树的基本操作和应用。
具体来说,我们需要实现一个树的数据结构,并对其进行插入、删除、查找等操作,同时还需要实现树的遍历算法,包括先序、中序和后序遍历。
二、实验原理树是一种非线性的数据结构,由结点和边组成。
树的每个结点都可以有多个子结点,但是每个结点只有一个父结点,除了根结点外。
树的基本操作包括插入、删除和查找。
在本次实验中,我们采用二叉树作为实现树的数据结构。
二叉树是一种特殊的树,每个结点最多只有两个子结点。
根据二叉树的特点,我们可以使用递归的方式实现树的插入、删除和查找操作。
三、实验过程1. 实现树的数据结构首先,我们需要定义树的结点类,包括结点值、左子结点和右子结点。
然后,我们可以定义树的类,包括根结点和相应的操作方法,如插入、删除和查找。
2. 实现插入操作插入操作是将一个新的结点添加到树中的过程。
我们可以通过递归的方式实现插入操作。
具体来说,如果要插入的值小于当前结点的值,则将其插入到左子树中;如果要插入的值大于当前结点的值,则将其插入到右子树中。
如果当前结点为空,则将新的结点作为当前结点。
3. 实现删除操作删除操作是将指定的结点从树中移除的过程。
我们同样可以通过递归的方式实现删除操作。
具体来说,如果要删除的值小于当前结点的值,则在左子树中继续查找;如果要删除的值大于当前结点的值,则在右子树中继续查找。
如果要删除的值等于当前结点的值,则有三种情况:- 当前结点没有子结点:直接将当前结点置为空。
- 当前结点只有一个子结点:将当前结点的子结点替代当前结点。
- 当前结点有两个子结点:找到当前结点右子树中的最小值,将其替代当前结点,并在右子树中删除该最小值。
4. 实现查找操作查找操作是在树中寻找指定值的过程。
同样可以通过递归的方式实现查找操作。
具体来说,如果要查找的值小于当前结点的值,则在左子树中继续查找;如果要查找的值大于当前结点的值,则在右子树中继续查找。
数据结构实验报告总结
数据结构实验报告总结本次数据结构实验主要涉及到线性表、栈和队列的基本操作,通过实验操作和总结,我对数据结构的相关知识有了更深入的理解和掌握。
首先,我们进行了线性表的实验操作。
线性表是一种数据结构,它是由n(n≥0)个数据元素组成的有限序列。
在实验中,我们学习了线性表的顺序存储结构和链式存储结构。
通过代码实现,我深刻理解了顺序表和链表的存储方式和特点。
在实验过程中,我发现顺序表适合查找操作,而链表适合插入和删除操作。
这让我对线性表的应用场景有了更清晰的认识。
其次,我们进行了栈的实验操作。
栈是一种特殊的线性表,它只能在表的一端进行插入和删除操作。
在实验中,我学习了栈的基本操作,包括入栈和出栈。
通过实际操作,我深刻理解了栈的“先进后出”的特性,以及它在计算机程序设计中的应用。
我发现栈在递归算法、表达式求值和括号匹配等方面有着重要的作用,这让我对栈的实际应用有了更深入的认识。
最后,我们进行了队列的实验操作。
队列是一种特殊的线性表,它只能在表的一端进行插入操作,而在另一端进行删除操作。
在实验中,我学习了队列的基本操作,包括入队和出队。
通过实际操作,我深刻理解了队列的“先进先出”的特性,以及它在计算机程序设计中的重要性。
我发现队列在广度优先搜索、模拟系统等方面有着重要的应用,这让我对队列的实际应用有了更深入的了解。
通过本次数据结构实验,我不仅掌握了线性表、栈和队列的基本操作,还深刻理解了它们在实际应用中的重要性。
我相信这些知识和经验对我的学习和工作都将有着重要的帮助。
在未来的学习和实践中,我将继续加强对数据结构的理解和运用,不断提升自己的编程能力和解决问题的能力。
总之,本次数据结构实验让我受益匪浅,我将继续努力学习和实践,不断提升自己的专业能力。
希望通过不懈的努力,能够在数据结构领域取得更大的成就。
数据结构实训实验报告
一、实验背景数据结构是计算机科学中一个重要的基础学科,它研究如何有效地组织和存储数据,并实现对数据的检索、插入、删除等操作。
为了更好地理解数据结构的概念和原理,我们进行了一次数据结构实训实验,通过实际操作来加深对数据结构的认识。
二、实验目的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、队列队列的特点是先进先出,常用于排队、任务调度等场景。
华中科技大学数据结构实验报告
华中科技大学数据结构实验报告课程实验报告课程名称:数据结构实验专业班级:信息安全201502学号:姓名:指导教师:报告日期:2016年10月28 日计算机科学与技术学院目录1基于顺序存储结构的线性表实现 (1)1.1问题描述 (1)1.2系统设计 (3)1.3系统实现 (7)1.4实验小结 (16)2 基于二叉链表的二叉树实现 (17)2.1问题描述 (17)2.2系统设计 (20)2.3系统实现 (23)2.4实验小结 (41)指导教师评定意见 (42)附录A 基于顺序存储结构线性表实现的源程序 (45)附录B 基于二叉链表二叉树实现的源程序 (53)1 基于顺序存储结构的线性表实现1.1 问题描述采用顺序表的物理结构,构造一个具有菜单的功能演示系统。
其中,在主程序中完成函数调用所需实参值的准备和函数执行结果的显示。
定义了线性表的初始化表、销毁表、清空表、判定空表、求表长和获得元素等基本运算对应的函数,并给出适当的操作提示显示,可选择以文件的形式进行存储和加载,即将生成的线性表存入到相应的文件中,也可以从文件中获取线性表进行操作。
1.1.1 线性表的基本概念线性表是最常用且最简单的一种数据结构,即n个数据元素的有限序列。
线性表中元素的个数n定义为线性表的长度,n=0时成为空表。
在非空表中的每个数据元素都有一个确定的位置,如a1是第一个数据元素,an是最后一个数据元素,ai是第i个数据元素。
线性表的存储结构分为线性存储和链式存储。
1.1.2 逻辑结构与基本运算线性表的数据逻辑结构定义如下:ADT List{数据对象:D={ai|ai∈ElemSet,i=1,2,……,n,n≥0}数据关系:R1={ <ai-1,ai> | ai-1,ai∈D,i=2,……,n}}依据最小完备性和常用性相结合的原则,以函数形式定义了包括线性表的初始化表、加载表、保存表、销毁表、清空表、判定空表、求表长、获得元素、查找元素、获得前驱、获得后继、插入元素、删除元素、遍历表 14 个基本运算,要求分别定义函数来实现上述功能,具体功能运算如下:⑴初始化表:函数名称是InitaList(L);初始条件是线性表L不存在已存在;操作结果是构造一个空的线性表。
数据结构实验报告
数据结构实验报告一、实验目的本次实验的目的是通过实际操作,深入理解数据结构的概念、特性和应用,并运用所学知识进行问题解决和算法设计。
二、实验内容本次实验主要包括以下内容:1. 数组的创建和操作:- 数组的定义和初始化- 数组元素的读取和修改- 数组的遍历和排序2. 链表的创建和操作:- 单链表的定义和初始化- 单链表的插入和删除- 单链表的遍历和逆序输出3. 栈和队列的创建和操作:- 栈的初始化和压栈、弹栈操作- 队列的初始化和入队、出队操作4. 树的创建和操作:- 二叉树的定义和初始化- 二叉树的遍历(前序、中序、后序遍历)- 二叉树的查找、插入和删除操作三、实验步骤和方法1. 数组的创建和操作:- 根据题目要求,声明和初始化数组;- 使用循环结构,遍历数组,并根据需求进行元素的修改;- 运用排序算法对数组进行排序,并验证排序结果的正确性。
2. 链表的创建和操作:- 根据题目要求,创建单链表的结构体和相关操作函数;- 使用动态内存分配函数malloc(),创建链表节点并插入到链表中;- 根据题目要求,设计相应的插入和删除函数,实现链表的插入和删除操作;- 遍历链表,并将链表节点的数据逆序输出。
3. 栈和队列的创建和操作:- 根据题目要求,创建栈和队列的结构体和相关操作函数;- 使用数组和指针实现栈和队列的功能,并初始化相关变量;- 实现栈的压栈和弹栈操作,并验证结果的正确性;- 实现队列的入队和出队操作,并验证结果的正确性。
4. 树的创建和操作:- 根据题目要求,创建二叉树的结构体和相关操作函数;- 使用动态内存分配函数malloc(),创建二叉树的节点,并根据题目要求插入到二叉树中;- 实现二叉树的遍历(前序、中序、后序遍历),并验证遍历结果的正确性;- 根据题目要求,实现二叉树的查找、插入和删除操作。
四、实验结果与分析在实验过程中,我按照题目的要求,使用所学的数据结构相关知识,设计了相应的代码,并通过调试和运行,得到了实验结果。
华中科技大学数据结构实验报告
华中科技大学数据结构实验报告课程实验报告课程名称:数据结构实验专业班级:信息安全201502学号:姓名:指导教师:报告日期:2016年10月28 日计算机科学与技术学院目录1基于顺序存储结构的线性表实现 (1)1.1问题描述 (1)1.2系统设计 (3)1.3系统实现 (7)1.4实验小结 (16)2 基于二叉链表的二叉树实现 (17)2.1问题描述 (17)2.2系统设计 (20)2.3系统实现 (23)2.4实验小结 (41)指导教师评定意见 (42)附录A 基于顺序存储结构线性表实现的源程序 (45)附录B 基于二叉链表二叉树实现的源程序 (53)1 基于顺序存储结构的线性表实现1.1 问题描述采用顺序表的物理结构,构造一个具有菜单的功能演示系统。
其中,在主程序中完成函数调用所需实参值的准备和函数执行结果的显示。
定义了线性表的初始化表、销毁表、清空表、判定空表、求表长和获得元素等基本运算对应的函数,并给出适当的操作提示显示,可选择以文件的形式进行存储和加载,即将生成的线性表存入到相应的文件中,也可以从文件中获取线性表进行操作。
1.1.1 线性表的基本概念线性表是最常用且最简单的一种数据结构,即n个数据元素的有限序列。
线性表中元素的个数n定义为线性表的长度,n=0时成为空表。
在非空表中的每个数据元素都有一个确定的位置,如a1是第一个数据元素,an是最后一个数据元素,ai是第i个数据元素。
线性表的存储结构分为线性存储和链式存储。
1.1.2 逻辑结构与基本运算线性表的数据逻辑结构定义如下:ADT List{数据对象:D={ai|ai∈ElemSet,i=1,2,……,n,n≥0}数据关系:R1={ <ai-1,ai> | ai-1,ai∈D,i=2,……,n}}依据最小完备性和常用性相结合的原则,以函数形式定义了包括线性表的初始化表、加载表、保存表、销毁表、清空表、判定空表、求表长、获得元素、查找元素、获得前驱、获得后继、插入元素、删除元素、遍历表 14 个基本运算,要求分别定义函数来实现上述功能,具体功能运算如下:⑴初始化表:函数名称是InitaList(L);初始条件是线性表L不存在已存在;操作结果是构造一个空的线性表。
数据结构实验报告(实验)
数据结构实验报告(实验)数据结构实验报告(实验)1. 实验目的1.1 理解数据结构的基本概念和操作1.2 学会使用数据结构解决实际问题1.3 掌握常用数据结构的实现和应用2. 实验环境2.1 操作系统:Windows 102.2 编程语言:C++2.3 开发工具:Visual Studio3. 实验内容3.1 实验一:线性表的实现和应用3.1.1 设计并实现线性表的基本操作函数3.1.2 实现线性表的插入、删除、查找等功能 3.1.3 实现线性表的排序算法3.1.4 应用线性表解决实际问题3.2 实验二:栈和队列的实现和应用3.2.1 设计并实现栈的基本操作函数3.2.2 设计并实现队列的基本操作函数3.2.3 实现栈和队列的应用场景3.2.4 比较栈和队列的优缺点3.3 实验三:树的实现和应用3.3.1 设计并实现二叉树的基本操作函数3.3.2 实现二叉树的创建、遍历和查找等功能3.3.3 实现树的遍历算法(前序、中序、后序遍历)3.3.4 应用树解决实际问题4. 数据结构实验结果4.1 实验一的结果4.1.1 线性表的基本操作函数实现情况4.1.2 线性表的插入、删除、查找功能测试结果4.1.3 线性表的排序算法测试结果4.1.4 线性表解决实际问题的应用效果4.2 实验二的结果4.2.1 栈的基本操作函数实现情况4.2.2 队列的基本操作函数实现情况4.2.3 栈和队列的应用场景测试结果4.2.4 栈和队列优缺点的比较结果4.3 实验三的结果4.3.1 二叉树的基本操作函数实现情况4.3.2 二叉树的创建、遍历和查找功能测试结果 4.3.3 树的遍历算法测试结果4.3.4 树解决实际问题的应用效果5. 实验分析与总结5.1 实验问题与解决方案5.2 实验结果分析5.3 实验总结与心得体会6. 附件附件一:实验源代码附件二:实验数据7. 法律名词及注释7.1 版权:著作权法规定的对原创作品享有的权利7.2 专利:国家授予的在一定时间内对新型发明享有独占权利的证书7.3 商标:作为标识企业商品和服务来源的标志的名称、符号、图案等7.4 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。
数据结构课程实验报告
数据结构课程实验报告目录1. 实验简介1.1 实验背景1.2 实验目的1.3 实验内容2. 实验方法2.1 数据结构选择2.2 算法设计2.3 程序实现3. 实验结果分析3.1 数据结构性能分析3.2 算法效率比较3.3 实验结论4. 实验总结1. 实验简介1.1 实验背景本实验是数据结构课程的一次实践性操作,旨在帮助学生加深对数据结构的理解和运用。
1.2 实验目的通过本实验,学生将学会如何选择合适的数据结构来解决特定问题,了解数据结构与算法设计的关系并能将其应用到实际问题中。
1.3 实验内容本实验将涉及对一些经典数据结构的使用,如链表、栈、队列等,并结合具体问题进行算法设计和实现。
2. 实验方法2.1 数据结构选择在实验过程中,需要根据具体问题选择合适的数据结构,比如针对需要频繁插入删除操作的情况可选择链表。
2.2 算法设计针对每个问题,需要设计相应的算法来实现功能,要考虑算法的效率和实际应用情况。
2.3 程序实现根据算法设计,编写相应的程序来实现功能,并进行调试测试确保程序能够正确运行。
3. 实验结果分析3.1 数据结构性能分析在实验过程中,可以通过对不同数据结构的使用进行性能分析,如时间复杂度和空间复杂度等,以便选择最优的数据结构。
3.2 算法效率比较实验完成后,可以对不同算法在同一数据结构下的效率进行比较分析,找出最优算法。
3.3 实验结论根据实验结果分析,得出结论并总结经验教训,为后续的数据结构和算法设计提供参考。
4. 实验总结通过本次实验,学生将对数据结构与算法设计有更深入的了解,并能将所学知识应用到实际问题中,提高自己的实践能力和解决问题的能力。
华科数据结构二叉树实验报告
华科数据结构二叉树实验报告实验报告:华科数据结构二叉树实验报告一、引言数据结构是计算机科学中非常重要的一门课程,它研究如何组织和存储数据以及如何有效地访问和操作数据。
二叉树是一种常用的数据结构,它具有良好的扩展性和灵活性,被广泛应用于各种领域。
本实验旨在通过实践,加深对二叉树的理解和应用。
二、实验目的1. 掌握二叉树的基本概念和特性;2. 熟悉二叉树的遍历算法;3. 实现二叉树的基本操作,包括创建、插入、删除和查找等;4. 分析和比较不同的二叉树操作的时间复杂度。
三、实验环境本实验使用C++编程语言在Windows操作系统下进行。
四、实验内容和步骤1. 实验内容本次实验主要包括以下内容:(1) 实现二叉树的创建:根据给定的数据,构建一棵二叉树;(2) 实现二叉树的插入:向已有的二叉树中插入新的节点;(3) 实现二叉树的删除:从已有的二叉树中删除指定节点;(4) 实现二叉树的查找:在已有的二叉树中查找指定节点;(5) 实现二叉树的遍历:包括前序遍历、中序遍历和后序遍历。
2. 实验步骤(1) 创建二叉树:根据给定的数据,构建一棵二叉树。
可以通过手动输入数据或者读取文件的方式获取数据。
首先,创建一个二叉树的节点类,包含数据和左右子节点的指针。
然后,根据输入的数据,逐个创建节点并建立节点之间的关系,最终构建出一棵完整的二叉树。
(2) 插入节点:实现向已有的二叉树中插入新的节点的操作。
插入节点时,需要找到插入位置,并建立节点之间的关系。
(3) 删除节点:实现从已有的二叉树中删除指定节点的操作。
删除节点时,需要考虑节点的位置和节点的子树情况,并相应地调整节点之间的关系。
(4) 查找节点:实现在已有的二叉树中查找指定节点的操作。
可以通过递归或者迭代的方式进行查找,找到节点后返回节点的指针。
(5) 遍历二叉树:实现二叉树的前序遍历、中序遍历和后序遍历操作。
遍历过程中,可以使用递归或者栈来实现。
五、实验结果与分析1. 实验结果经过实验,我们成功地实现了二叉树的创建、插入、删除、查找和遍历操作。
数据结构实验报告
数据结构实验报告一、实验目的数据结构是计算机科学中的重要基础课程,通过实验可以更深入地理解和掌握数据结构的概念、原理和应用。
本次实验的主要目的包括:1、熟悉常见的数据结构,如链表、栈、队列、树和图等。
2、掌握数据结构的基本操作,如创建、插入、删除、遍历等。
3、提高编程能力和解决实际问题的能力,能够运用合适的数据结构解决具体的问题。
二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。
三、实验内容1、链表的实现与操作单向链表的创建、插入和删除节点。
双向链表的实现和基本操作。
循环链表的特点和应用。
2、栈和队列的实现栈的后进先出特性,实现入栈和出栈操作。
队列的先进先出原则,完成入队和出队功能。
3、树的操作二叉树的创建、遍历(前序、中序、后序)。
二叉搜索树的插入、查找和删除操作。
4、图的表示与遍历邻接矩阵和邻接表表示图。
深度优先搜索和广度优先搜索算法的实现。
四、实验步骤及结果1、链表的实现与操作单向链表:首先,定义了链表节点的结构体,包含数据域和指向下一个节点的指针域。
通过创建链表头节点,并使用循环依次插入新节点,实现了链表的创建。
插入节点时,根据指定位置找到插入点的前一个节点,然后修改指针完成插入操作。
删除节点时,同样找到要删除节点的前一个节点,修改指针完成删除。
实验结果:成功创建、插入和删除了单向链表的节点,并正确输出了链表的内容。
双向链表:双向链表节点结构体增加了指向前一个节点的指针。
创建、插入和删除操作需要同时维护前后两个方向的指针。
实验结果:双向链表的各项操作均正常,能够双向遍历链表。
循环链表:使链表的尾节点指向头节点,形成循环。
在操作时需要特别注意循环的边界条件。
实验结果:成功实现了循环链表的创建和遍历。
2、栈和队列的实现栈:使用数组或链表来实现栈。
入栈操作将元素添加到栈顶,出栈操作取出栈顶元素。
实验结果:能够正确进行入栈和出栈操作,验证了栈的后进先出特性。
华科数据结构二叉树实验报告
华科数据结构二叉树实验报告一、实验目的本次实验旨在通过实践操作,深入理解二叉树的基本概念、性质和操作,并掌握二叉树的遍历算法。
二、实验内容1. 实现二叉树的建立和遍历算法;2. 进行性能测试,比较不同遍历算法的效率。
三、实验原理1. 二叉树的定义二叉树是一种特殊的树结构,它的每个节点最多只有两个子节点,分别称为左子节点和右子节点。
二叉树的每个节点都可以看作是一个小的二叉树。
2. 二叉树的遍历算法二叉树的遍历是指按照某种规则依次访问二叉树中的每个节点。
常用的遍历算法有前序遍历、中序遍历和后序遍历。
- 前序遍历(Preorder Traversal):先访问根节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。
- 中序遍历(Inorder Traversal):先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。
- 后序遍历(Postorder Traversal):先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。
四、实验步骤1. 实现二叉树的建立算法根据给定的数据,使用递归的方式构建二叉树。
具体步骤如下:- 如果当前节点为空,将数据作为当前节点的值创建新节点;- 如果当前节点不为空,比较数据与当前节点的值的大小,如果小于当前节点的值,则递归地将数据插入到当前节点的左子树中;如果大于当前节点的值,则递归地将数据插入到当前节点的右子树中。
2. 实现二叉树的遍历算法根据前述的遍历算法原理,实现前序遍历、中序遍历和后序遍历算法。
具体步骤如下:- 前序遍历算法:先访问当前节点,然后递归地前序遍历左子树,最后递归地前序遍历右子树。
- 中序遍历算法:先递归地中序遍历左子树,然后访问当前节点,最后递归地中序遍历右子树。
- 后序遍历算法:先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问当前节点。
3. 进行性能测试使用不同的遍历算法对同一二叉树进行遍历,并记录遍历所需的时间。
华中科技大学 大数据结构 实验报告材料
课程实验报告课程名称:数据结构专业班级:华中科技大学材控1402班学号:U201411219姓名:煌指导教师:袁凌报告日期:2016年5月20日计算机科学与技术学院目录实验报告要求说明 (1)1基于顺序存储结构实现线性表的基本运算 (1)1.1 问题描述 (1)1.2 顺序表演示系统设计 (1)1.2.1 系统总体设计 (1)1.2.2 有关常量和类型定义 (1)1.2.3 算法设计 (1)1.3 顺序表演示系统实现与测试 (1)1.3.1 系统实现 (1)1.3.2 系统测试 (1)1.4 实验小结 (2)2基于链式存储结构实现线性表的基本运算 (3)2.1 问题描述 (3)2.2 单链表演示系统设计 (3)2.2.1 系统总体设计 (3)2.2.2 有关常量和类型定义 (3)2.2.3 算法设计 (3)2.3 单链表演示系统实现与测试 (3)2.3.1 系统实现 (3)2.3.2 系统测试 (3)2.4 实验小结 (3)参考文献 (5)1课程实验概述本次课程实验旨在加强学生课堂理论学习之后增强上机能力,熟练掌握并应用数据结构中的两种逻辑结构的典型代表——线性表和树。
线性表的顺序存储具有随机存取的功能,而链式存储能有效的利用动态存储空间,学会合理的选择这两种存储方式,看似简单,但在实际应用具有很大的用处。
而树(二叉树)是非线性逻辑结构的代表,树模型的建立可以说完全建立在递归思想之上,树的几乎所有操作都涉及到递归调用,当然我们也可以用栈来实现非递归调用,但是其思想也是相近的。
因此树的实验旨在帮助我们递归思想的建立和成熟。
2实验一基于顺序结构的线性表实现2.1实验容与要求实验容:基于顺序存储结构,实现线性表ADT,具有10种基本运算。
具体要求:1.提供一个实现功能的演示系统。
2.具体物理结构和数据元素类型自定。
3.线性表数据可以使用磁盘文件永久保存。
2.2程序概要设计1.明确基本功能程序需要实现的12个基本功能分别是:IntiaList(初始化),DestroyList(摧毁线性表),ClearList(清空线性表),ListEmpty(判断表空),ListLength(求表长),GetElem(取表中元素),LocatElem(获得元素地址),PriorElem(取前继),NextElem(取后继)。
数据结构实验报告及心得体会
数据结构实验报告及心得体会一、实验背景和目的本次实验的目的是通过设计和实现常见的数据结构,来加深对数据结构的理解,并能够熟练运用。
实验中使用的数据结构有栈、队列和链表,通过这些数据结构的设计和应用,能够更好地掌握数据结构的原理和应用。
二、实验过程1. 栈的设计和实现在本次实验中,我设计了一个基于数组的栈,用于存储数据。
首先,我定义了一个栈类,包含栈的容量、栈顶指针和存储数据的数组。
然后,我实现了入栈、出栈和判断栈空、栈满的操作。
在测试阶段,我编写了一些测试用例,验证栈的功能和正确性。
2. 队列的设计和实现在本次实验中,我设计了一个基于链表的队列。
首先,我定义了一个队列类,包含队列的头指针和尾指针。
然后,我实现了入队、出队和判断队列空、队列满的操作。
在测试阶段,我编写了一些测试用例,验证队列的功能和正确性。
3. 链表的设计和实现在本次实验中,我设计了一个能够存储任意数据类型的单链表。
首先,我定义了一个链表类,包含链表的头指针和尾指针。
然后,我实现了插入、删除和查找节点的操作。
在测试阶段,我编写了一些测试用例,验证链表的功能和正确性。
三、实验结果和分析通过本次实验,我成功设计和实现了栈、队列和链表这三种常见的数据结构。
在测试阶段,我对这些数据结构进行了充分的测试,验证了它们的功能和正确性。
在测试过程中,我发现栈和队列在实际应用中具有很大的作用。
例如,在计算表达式的过程中,可以利用栈来实现中缀表达式转后缀表达式的功能;在操作系统中,可以利用队列来实现进程的调度。
此外,在实验过程中,我还进一步加深了对数据结构的理解。
通过设计和实现数据结构,我学会了如何根据问题的需求选择合适的数据结构,并能够运用数据结构解决实际问题。
在实现过程中,我遇到了一些问题,例如链表的插入和删除操作需要考虑前后指针的变化,但通过不断的实践和思考,最终成功解决了这些问题。
同时,我还注意到数据结构的时间复杂度和空间复杂度对算法的性能有着重要的影响,因此在设计数据结构时需要充分考虑这些因素。
数据结构实验报告
数据结构实验报告一、实验目的数据结构是计算机科学中的重要基础课程,通过本次实验,旨在加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解和运用,提高编程能力和问题解决能力,培养算法设计和分析的思维。
二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。
三、实验内容1、数组与链表的实现与操作分别实现整数数组和整数链表的数据结构。
实现数组和链表的插入、删除、查找操作,并比较它们在不同操作下的时间复杂度。
2、栈与队列的应用用数组实现栈结构,用链表实现队列结构。
模拟栈的入栈、出栈操作和队列的入队、出队操作,解决实际问题,如表达式求值、任务调度等。
3、二叉树的遍历构建二叉树的数据结构。
实现先序遍历、中序遍历和后序遍历三种遍历算法,并输出遍历结果。
4、图的表示与遍历用邻接矩阵和邻接表两种方式表示图。
实现图的深度优先搜索(DFS)和广度优先搜索(BFS)算法,并分析它们的时间复杂度。
四、实验步骤1、数组与链表数组的实现:定义一个固定大小的整数数组,通过索引访问和操作数组元素。
链表的实现:定义链表节点结构体,包含数据和指向下一个节点的指针。
插入操作:对于数组,若插入位置在末尾,直接赋值;若不在末尾,需移动后续元素。
对于链表,找到插入位置的前一个节点,修改指针。
删除操作:数组需移动后续元素,链表修改指针即可。
查找操作:数组通过索引直接访问,链表需逐个节点遍历。
2、栈与队列栈的实现:用数组模拟栈,设置栈顶指针。
队列的实现:用链表模拟队列,设置队头和队尾指针。
入栈和出栈操作:入栈时,若栈未满,将元素放入栈顶,栈顶指针加 1。
出栈时,若栈不为空,取出栈顶元素,栈顶指针减 1。
入队和出队操作:入队时,在队尾添加元素。
出队时,取出队头元素,并更新队头指针。
3、二叉树构建二叉树:采用递归方式创建二叉树节点。
先序遍历:先访问根节点,再递归遍历左子树,最后递归遍历右子树。
中序遍历:先递归遍历左子树,再访问根节点,最后递归遍历右子树。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程实验报告课程名称:数据结构专业班级:计算机科学与技术13xx班学号:姓名:指导教师:报告日期:2015计算机科学与技术学院目录1 课程实验概述 (1)2 实验一基于顺序结构的线性表实现2.1 问题描述 (2)2.2 系统设计 (2)2.3 系统实现 (3)2.4 效率分析 (12)3 实验二基于链式结构的线性表实现3.1 问题描述 (14)3.2 系统设计 (14)3.3 系统实现 (15)3.4 效率分析 (25)4 实验总结与评价 (27)1 课程实验概述1.1 加深对数据结构和算法的理解,进一步提高编程能力;1.2 培养和提高学生分析问题与解决问题的综合能力;1.3 整理资料,撰写规范的实验报告。
2 实验一基于顺序结构的线性表实现2.1 问题描述基于顺序存储结构,实现线性表的基本的常见的运算。
2.2 系统设计2.2.1系统包括15个功能,分别为:1.Creatlist2.DestroyList3.ClearList4.ListEmpty5.ListLength6.GetElem7.LocatElem8.PriorElem9.NextElem10.ListInsert11.ListDelete12.ListTrabverse13.Save the List14.Load the List15.Add elem to List2.2.2系统数据物理结构类型为顺序结构,存储的数据类型为结构体:typedef struct{int num;}ElemType;//定义数据类型2.2.3顺序表应声明一个头结点:typedef struct{ElemType *elem ; //存储顺序表开始的头指针int listsize; //存储当前顺序表总长度int length; //存储当前元素的总个数,且当length为-1值时,表示还未被初始化}Sqlist;//顺序表物理结构2.3 系统实现2.3.1 InitList(&L)操作结果:构造一个空的线性表L。
操作步骤:函数接受传入的未初始化的顺序表地址,然后为其然后为顺序表分配空间,并把地址赋值给elem,分别初始化L中成员length与listsize,具体代码如下:Status InitList(Sqlist *L) //初始化顺序表{L->elem = (ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L->elem)exit(OVERFLOW);L->length = 0;L->listsize = LIST_INIT_SIZE;return OK;}2.3.2 DestroyList(&L)初始条件:线性表已经存在。
操作结果:销毁线性表。
操作步骤:释放已分配给顺序表的空间,将length置为-1,表示该顺序表已被销毁,同时listsize也置为0,具体代码如下:Status DestroyList(Sqlist *L)//销毁顺序表{free(L->elem);//释放已分配的空间L->elem = NULL;L->length = -1; //顺序表状态为被摧毁L->listsize = 0; //长度置0}2.3.3 ClearList(&L)初始条件:线性表L已存在。
操作结果:将线性表L置空。
操作步骤:将表L中length置为0,表示该表为空,其他部分不予操作,具体代码如下:Status ClearList(Sqlist *L)//顺序表清空{L->length =0; //长度置0return OK;}2.3.4 ListEmpty(L)初始条件:线性表L已存在。
操作结果:若L为空表,则返回True,若L不为空,则返回False。
操作步骤:根据表内结构成员length判断,若length为0则返回true,否则,返回false,具体代码如下:Status ListEmpty(Sqlist L)//判断顺序表是否为空{if(L.length==0)//链式表为空,返回真return OK;elsereturn ERROR;//链式表不为空返回FALSE}2.3.5 ListLength(L)初始条件:线性表L已存在。
操作结果:返回L中的元素个数。
操作步骤:length存储表长,直接使用,具体代码如下:Status ListLength(Sqlist L)//返回顺序表元素个数{printf("线性表长度为%d",L.length);}2.3.6 GetElem(L,i,&e)初始条件:线性表L已存在。
操作结果:用e返回L中第i个元素数值。
操作步骤:首先判断传入参数i是否合法,若i<1或大于表长,则返回ERROR,不进行操作,若合法,修改参数e,将第i号元素赋值给e,具体代码如下:Status GetElem(Sqlist L,int i,ElemType *e)//获取i号元素{if(i>L.length || i<0) //判断i值是否合法{return ERROR;}else{*e = L.elem[i-1]; //返回i号值return OK;}}2.3.7 LocateElem(L,e,compare())初始条件:线性表L已存在,compare()是元素数据判定函数。
操作结果:返回L中与第1个与e满足关系compare()的数据元素的位序。
若这样的数据元素不存在,则返回值为0。
操作步骤:从头开始循环遍历顺序表,利用i计数,若循环至表尾,或者查找到相同元素,则终止循环;若循环至表尾,表尾元素并不相等,表示不存在该元素,返回FALSE;若并为循环到表尾,终止循环,表示循环结束处元素即满足条件,返回位序i,具体代码如下:Status LocateElem(Sqlist L,ElemType e, Status (*compare)(ElemType,ElemType)){ElemType *p;p = L.elem;int i=1;while(i<=L.length&&!(*compare)(e, *p++)) //查找与e相等的元素i++;if(i<=L.length)return i;//返回元素序号elsereturn FALSE;}2.3.8 PriorElem(L,cur_e,&pre_e)初始条件:线性表L已存在。
操作结果:若cur_e是L的数据元素,且不是第一个,则用pre_e返回它的前驱,负责操作失败,pre_e无定义。
操作步骤:根据传入参数cur_e,利用LocateElem()函数,确定该元素位序,若未查找到该元素或查找到该元素为首元素,均表示不存在该元素前驱,返回FALSE;否则,修改pre_e的值,将查找到值的前驱赋值给它,具体代码如下:Status PriorElem(Sqlist L,ElemType cur_e,ElemType *pre_e)//查找指定元素前驱{int i;i = LocateElem(L, cur_e, *compare);//使用定位函数,查找第i个值if(i == -1){return -1;}else if(!i || i ==1)//如果未找到元素或元素为第一个,则前驱不存在return ERROR;else{GetElem(L,i-1,pre_e);//前驱存在,获取该元素return i-1;}}2.3.9 NextElem(L,cur_e,&next_e)初始条件:线性表L已存在。
操作结果:若cur_e是L的数据元素,且不是第一个,则用next_e返回它的后继,否则操作失败,next_e 无定义。
操作步骤:根据传入参数cur_e,利用LocateElem()函数,确定该元素位序,若未查找到该元素或查找到该元素为尾元素,均表示不存在该元素后继,返回FALSE;否则,修改next_e的值,将查找到值的后继赋值给它,具体代码如下:Status NextElem(Sqlist L,ElemType cur_e,ElemType *next_e){int i;i = LocateElem(L, cur_e, *compare);//使用定位函数,查找第i个值if(i == -1){return -1;}else if(!i || i==L.length)//如果未找到元素或元素为最后一个,则后继不存在return ERROR;else{GetElem(L,i+1,next_e);//后继存在,获取该元素return i+1;}}2.3.10 ListInsert(&L,I,e)初始条件:线性表已存在。
操作结果:在L中第i个位置前插入新的数据元素e,L的长度加1。
具体代码:首先判断传入i值是否合法,当i>L.length或者i<1时,不合法,返回ERROR,否则,执行下一步;第二步先判断数组是否已存储满,若满,增加分配空间,若未满,则执行插入操作;第三步,先将第i号元素之后每个元素向后挪一位,之后将要插入元素赋值给第i号元素,表长length增加1,具体代码如下:Status ListInsert(Sqlist *L,int i,ElemType e)//在顺序表指定位置插入元素{if(i<1 || i>L->length+1) //判断插入点是否合法return ERROR;if(L->length > L->listsize) //若空间不足,为数组增加分配空间{ElemType *newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT)*sizeof(ElemType));if(!newbase)return OVERFLOW;L->elem = newbase;L->listsize = L->listsize + LISTINCREMENT;}int j;for(j=L->length-1;j>=i-1;j--) //插入值后的元素全部向后移动一个{L->elem[j+1] = L->elem[j];}L->elem[i-1].num = e.num;return OK;}2.3.11 ListDelete(&L,I,&e)初始条件:线性表L已存在且非空,1<=i<=ListLength(L)。