《数据结构》课程实验指导书(10-11)

上传人:无*** 文档编号:158260191 上传时间:2022-10-03 格式:DOC 页数:30 大小:207.50KB
收藏 版权申诉 举报 下载
《数据结构》课程实验指导书(10-11)_第1页
第1页 / 共30页
《数据结构》课程实验指导书(10-11)_第2页
第2页 / 共30页
《数据结构》课程实验指导书(10-11)_第3页
第3页 / 共30页
资源描述:

《《数据结构》课程实验指导书(10-11)》由会员分享,可在线阅读,更多相关《《数据结构》课程实验指导书(10-11)(30页珍藏版)》请在装配图网上搜索。

1、数据结构课程实验指导书河南理工大学地理信息系统专业二八年九月前 言数据结构是计算机科学与技术及GIS专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法(存储结构),以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在GIS软件开发、程序设计中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁

2、、高效、实用的算法;并为学习空间数据库原理、GIS设计与开发等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。学习这门课程,习题和实验是两个关键环节。学生理解算法,上机实验是最佳的途径之一。因此,实验环节的好坏是学生能否学好数据结构的关键。为了更好地配合学生实验,特编写此实验指导书。实验指导书按照实验教学大纲的要求,为每个主要的知识点精选了的典型的实验题目,对每个实验题目提出具体实现要求,并对算法的实现进行提示,希望对同学们完成实验有所帮助。目录实验一 线性表的链表实现类的设计1实验二 顺序栈的自定义类设计2实验三 字符串的操作类设计3实验四 树和二叉树的自定义类的设计4实验五

3、图的最短路径算法设计5实验六 自定义类应用综合设计6实验一 线性表的链表实现类的设计实验类型: 验证性 实验学时:2学时一、实验目的:1、 掌握C+面向对象类的设计和用VC+上机调试线性表的基本方法;2、 掌握线性表的基本操作,如插入、删除、查找,以及线性表合并等运算在链式存储结构上的运算;并能够运用线性表基本操作解决问题,实现相应算法。二、实验要求:1、 C+完成类的设计及基本操作算法并上机调试通过。2、 撰写实验报告,提供实验结果和数据。三、实验内容: 设计你的线性表的链式存储结构类,编程实现通过键盘输入数据建立链表、查找、插入结点、删除结点、显示链表以及两链表的合并运算等操作。测试数据示

4、例:(1) 以L1=0, 5, 9, 10, 12, 12, 17, 20, 24构造链表;(2) 找到重复的第二个元素12并删除它;(3) 在第五个元素后插入55;(4) 生成L2 = 33, 45, 50的链表并将它与L1的链表合并。可通过对你设计的链表类的简单应用来验证相应类的成员函数代码的正确性。如:管理以下学生表格信息,能打印表格内容,并能修改表格信息、添加学生、删除学生等操作。学号姓名年龄专业106090501李明18计算机信息安全203090211赵高朋19电气自动化405090521周亮19地理信息注: 也可以完成课本第二章习题2.14题(P85)的代码设计作为本次课堂实验内容

5、。四、仪器设备: 计算机、VC+编译环境五、实验方法:用C+语言设计类,并实现相关类的基本操作,程序在VC+环境下调试通过。并选择恰当的测试数据验证算法的正确性。六、实验步骤:1、 在上机前提前完成设计代码;2、 程序调试通过,可运行;3、 通过测试数据和对象方法调用验证算法正确性。七、实验结果处理:对程序调试中的问题要进行总结。八、实验注意事项:独立完成实验及实验报告,抄袭者不给成绩。九、预习与思考题:见课堂讲授课件和作业布置。十、实验报告要求:本门课程实验报告格式见 附件1,鼓励手写,可以打印。实验二 顺序栈的自定义类设计实验类型: 验证性 实验学时:2学时一、实验目的:1、 掌握用VC+

6、上机调试通过栈的顺序存储结构类的设计;2、 掌握顺序栈的基本操作,如进栈、出栈、判断栈空和栈满,取栈顶元素等运算在顺序存储结构上的运算;并能够运用栈的基本操作解决问题,实现相应算法。二、实验要求:1、 C+完成类的设计及基本操作算法并上机调试通过。2、 撰写实验报告,提供实验结果和数据。三、实验内容: 设计你的栈的顺序存储结构类,编程实现栈的基本操作。栈中的数据元素类型最好为字符类型,方便今后对字符串的算法设计和应用。测试数据示例:(1) 以“ABCDEFG”的字符串顺序进栈; (2) 以合适顺序出栈得到序列“CDBAGFE”;(3) 取栈顶元素得到F;(4) 进栈直到栈满和出栈直到栈空,检验

7、对这两种情形的正确判断和处理。可通过应用你设计的栈来实现一个简单图形编辑系统的“后悔”(回退)操作功能,如取消以前的几步不同类型的操作(删除刚画的图形、取消对顶点的编辑、取消图形的几何变换等),关键是对“回退”所需的保存的历史信息的结构设计要合理。注: 也可以完成课本第三章习题3.13题(P132)的代码设计作为本次课堂实验内容。四、仪器设备: 计算机、VC+编译环境五、实验方法:用C+语言设计类,并实现相关类的基本操作,程序在VC+环境下调试通过。并选择恰当的测试数据验证算法的正确性。六、实验步骤:1、 在上机前提前完成设计代码;2、 程序调试通过,可运行;3、 通过测试数据和对象方法调用验

8、证算法正确性。七、实验结果处理:对程序调试中的问题要进行总结。八、实验注意事项:独立完成实验及实验报告,抄袭者不给成绩。九、预习与思考题:见课堂讲授课件和作业布置。十、实验报告要求:本门课程实验报告格式见 附件1,鼓励手写,可以打印。实验三 字符串的操作类设计实验类型: 验证性 实验学时:2学时一、实验目的:1、 掌握动态分配空间的字符串的顺序存储类(链类)的设计;2、 掌握实现字符串的基本操作,如求串的长度、串的比较、复制、串的连接,取子串、子串匹配定位和串替换等运算。二、实验要求:1、 C+完成类的设计并上机调试通过。2、 撰写实验报告,提供实验结果和数据。三、实验内容: 用堆分配存储表示

9、串,实现串的比较、复制、串的连接,取子串、子串匹配定位和串替换等基本操作。测试数据示例:(1) 以“abcde”构造一个串s1,以“gabcdef”构造另一个串s2;(2) 比较s1和s2是否相等;(3) 在s2中定位s1子串;(4) 复制s2串并连接在s1串后。可尝试对下面的一段文本进行字符串的分析处理,自动提取其中不同的英文单词并另存为一个新的文本,示例文本:原文:美国职业篮球赛组织叫做全国篮球协会(the National Basketball Association,简称NBA)。每年夏初,协会举办称为 the World Championship(即NBA决赛)的年度锦标赛。分析提取

10、英文文本格式:theNationalBasketballAssociationNBAWorldChampionship注: 也可以完成课本第四章习题4.17题(P185)的代码设计作为本次课堂实验内容。四、仪器设备: 计算机、VC+编译环境五、实验方法:用C+语言设计类,并实现相关类的基本操作,程序在VC+环境下调试通过。并选择恰当的测试数据验证算法的正确性。六、实验步骤:1、 在上机前提前完成设计代码;2、 程序调试通过,可运行;3、 通过测试数据和对象方法调用验证算法正确性。七、实验结果处理:对程序调试中的问题要进行总结。八、实验注意事项:独立完成实验及实验报告,抄袭者不给成绩。九、预习与

11、思考题:见课堂讲授课件和作业布置。十、实验报告要求:本门课程实验报告格式见 附件1,鼓励手写,可以打印。实验四 树和二叉树的自定义类的设计实验类型: 验证性 实验学时:2学时一、实验目的:1、 进一步掌握树的结构及非线性特点,递归特点和动态性。2、 巩固对指针的使用和二叉树的三种遍历方法、建立方法及树的输入输出。二、实验要求:1、 C+完成类的设计并上机调试通过。2、 撰写实验报告,提供实验结果和数据。三、实验内容: 实现二叉树的遍历,实现先序、中序和后序递归遍历算法; 利用栈实现二叉树先序、中序遍历的非递归算法。测试数据示例:(1) 以层序遍历序列为abcdefghijklmn构造一棵二叉树

12、; (2) 分别输出其先序、中序和后序遍历结果;可尝试通过设计合适的树结构对地图矢量或栅格数据建立高效的格网索引算法,用于地图的快速显示和查询。注: 也可以完成课本第五章习题5.37题(P250)的代码设计作为本次课堂实验内容。四、仪器设备: 计算机、VC+编译环境五、实验方法:用C+语言设计类,并实现相关类的基本操作,程序在VC+环境下调试通过。并选择恰当的测试数据验证算法的正确性。六、实验步骤:1、 在上机前提前完成设计代码;2、 程序调试通过,可运行;3、 通过测试数据和对象方法调用验证算法正确性。七、实验结果处理:对程序调试中的问题要进行总结。八、实验注意事项:独立完成实验及实验报告,

13、抄袭者不给成绩。九、预习与思考题:见课堂讲授课件和作业布置。十、实验报告要求:本门课程实验报告格式见 附件1,鼓励手写,可以打印。实验五 图的最短路径算法设计实验类型: 验证性 实验学时:2学时一、实验目的:了解最短路径的概念,掌握求最短路径的方法(Dijkstra算法或Floyd算法)。二、实验要求:1、 C+完成图的相关类及算法的设计并上机调试通过。2、 撰写实验报告,提供实验结果和数据。三、实验内容: 建立一个包含6个结点的带权有向图,并求顶点V0到其它顶点的最短路径。测试数据由同学们自行选择。模拟简单的道路网数据进行交互式的最短路径查询算法(Dijkstra算法)示例。注: 也可以完成

14、课本第八章习题8.23题(P395)的代码设计作为本次课堂实验内容。四、仪器设备: 计算机、VC+编译环境五、实验方法:用C+语言设计类,并实现相关类的基本操作,程序在VC+环境下调试通过。并选择恰当的测试数据验证算法的正确性。六、实验步骤:1、 在上机前提前完成设计代码;2、 程序调试通过,可运行;3、 通过测试数据和对象方法调用验证算法正确性。七、实验结果处理:对程序调试中的问题要进行总结。八、实验注意事项:独立完成实验及实验报告,抄袭者不给成绩。九、预习与思考题:见课堂讲授课件和作业布置。十、实验报告要求:本门课程实验报告格式见 附件1,鼓励手写,可以打印。实验六 自定义类应用综合设计实

15、验类型: 综合性 实验学时:2学时一、实验目的:1、 进一步掌握各种数据结构的特点和适合解决问题的分析;2、 通过具体的有实际应用意义的问题解决和对前面设计的类的使用进一步提高程序设计能力和算法设计、分析能力。3、 考察学生的程序设计中的逻辑思维能力和软件开发设计能力。二、实验要求:1、 完成程序或简单系统的设计并上机调试通过。2、 撰写实验报告,提供实验结果和数据。三、实验内容: 从下面给出的题目中选做其中的一题(多做可加分):1. 约瑟夫环问题1)问题描述:有编号为1, 2n 的 n 个人按顺时针方向围坐一圈,每人持有一个正整数密码。开始给定一个正整数 m,从第一个人按顺时针方向自1开始报

16、数,报到m者出列,不再参加报数,这时将出列者的密码作为m,从出列者顺时针方向的下一人开始重新自1开始报数。如此下去,直到所有人都出列。试设计算法,输出出列者的序列。2)实验要求: 采用链式存储结构实现,结果可视化要友好。3) 实现提示:用链式存储解决此问题时可以采用循环链表。2. 停车场管理问题1)问题描述:设有一个可以停放n辆汽车的狭长停车场,它只有一个大门可以供车辆进出。车辆按到达停车场的早晚依次从停车场最里面向大门口处停放(最先到达的第一辆车放在停车场的最里面)。如果停车场已放满n辆车,则后来的车辆只能在停车场大门外的便道上等待,一旦停车场内有车走开,则排在便道上的第一辆车就进入停车场。

17、停车场内如有某辆车要开走,在它之后进入停车场的车都必须先退出停车场为它让路,待其开出停车场后,这些车辆再依原来的次序进场。每辆车在离开停车场时,都应根据它在停车场内停留的时间长短交费。如果停留在便道上的车未进停车场就要离去,允许其离去,不收停车费,并且仍然保持在便道上等待的车辆的次序。编写程序模拟该停车场的管理。2)实验要求: 要求程序输出每辆车到达后的停车位置(停车场或便道上),以及某辆车离开停车场时应缴纳的费用和他在停车场内停留的时间。3)实现提示:以栈模拟停车场,以队列模拟便道,按照从终端读入的车辆“到达”“离开”信息模拟停车场管理。3. 实现一个哈夫曼编/译码系统1)问题描述:利用哈夫

18、曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传输数据预先编码,在接收端将传来的数据进行译码。对于双工信道,每端都需要一个完整的编码/译码系统。试为这样的信息收发站写一个哈夫曼的编/译码系统。2)实验要求:一个完整的系统应具有以下功能:(1) I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。(2) E:编码(Encoding)。利用已建好的哈夫曼树对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。(3) D:译

19、码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。(4) P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。(5) T:打印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。3) 实现提示:(1) 文件CodeFile的基类型可以设为字节型。(2) 用户界面可以设计为“菜单”方式:显示上述功能符号,再加上“Q”,表示退出运行Quit。请用户

20、键入一个选择功能符。此功能执行完毕后再显示此菜单,直至某次用户选择了“E”为止。(3) 在程序的一次执行过程中,第一次执行I、D或C命令之后,哈夫曼树已经在内存了,不必再读入。每次执行中不一定执行I命令,因为文件hfmTree可能早已建好。4. 利用最小生成树算法解决通信网的总造价最低问题1)问题描述:若在n个城市之间建通信网络,秩序架设n-1条线路即可。如何以最低的经济代价建设这个通信网,是一个网络的最小生成树问题。2)实验要求:利用克鲁斯卡尔算法求网的最小生成树3) 实现提示:通信线路一旦建立,必然是双向的。因此,构造最小生成树的网一定是无向网。为简单起见,图的顶点数不超过10个,网中边的

21、权值设置成小于100。5. 教学计划编制问题1)问题描述:软件专业的学生要学习一系列课程,其中有些课程必须在其先修课完成后才能学习。2)实验要求:假设每门课程的学习时间为一个学期,试为该专业的学生设计教学计划,使他们能在最短时间内修完专业要求的全部课程。3) 实现提示:以顶点代表课程,弧代表课程的先后修关系,按课程先后关系建立有向无环图。利用拓扑排序实现。6公交线路优化路径的查询【问题描述】对于某城市的公交线路,乘坐公交的顾客希望在这样的线路上实现各种优化路径的查询。设该城市的公交线路的输入格式为: 线路编号:起始站名(该站坐标);经过的站点1名(该站坐标);经过的站点2名(该站坐标);经过的

22、站点n名(该站坐标);终点站名(该站坐标)。该线路的乘坐价钱;该线路平均经过多少时间来一辆;车速。 例如:63:A(32,45);B(76,45);C(76,90);N(100,100) 。1元;5分钟;150米/每分钟。 假定线路的乘坐价钱与乘坐站数无关,假定不考虑公交线路在路上的交通堵塞。 对这样的公交线路,需要在其上进行的优化路径查询包括:任何两个站点之间最便宜的路径;任何两个站点之间最省时间的路径。【设计要求】 根据上述公交线路的输入格式,定义并建立合适的图模型。 针对上述公交线路,能查询获得任何两个站点之间最便宜的路径,即输入站名S,T后,可以输出从S到T的最便宜的路径,输出格式为:

23、线路x :站名S,站名M1 ;换乘线路x :站名M1,站名M2;换乘线路x:站名MK,站名T。共花费x元。 针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(不考虑在中间站等下一辆线路的等待时间),即输入站名S,T后,可以输出从S到T的考虑在中间站等下一辆线路的等待时间的最省时间的路径,输出格式为:线路x:站名S,站名M1;换乘线路x:站名M1,站名M2;换乘线路x:站名MK,站名T。共花费x时间。 针对上述公交线路,能查询获得任何两个站点之间最省时间的路径(要考虑在中间站等下一辆线路的等待时间),即输入站名 S,T 后,可以输出从 S 到 T 的考虑在中间站等下一辆线路的等待时间的

24、最省时间的路径,输出格式为:线路 x:站名 S,站名 M1;换乘线路 x:站名 M1,站名 M2;换乘线路 x:站名 MK,站名 T。共花费 x 时间。四、仪器设备: 计算机、VC+编译环境五、实验方法:用C+语言完成设计,程序在VC+环境下调试通过。并选择恰当的测试数据验证程序的正确性。六、实验步骤:1、 在上机前提前完成设计代码;2、 程序调试通过,可运行;3、 通过测试数据和对象方法调用验证算法正确性。七、实验结果处理:对程序调试中的问题要进行总结。八、实验注意事项:独立完成实验及实验报告,抄袭者不给成绩。九、预习与思考题:见课堂讲授课件和作业布置。十、实验报告要求:本门课程实验报告格式

25、见 附件1,鼓励手写,可以打印。测绘与国土信息工程学院数据结构课程实验报告姓 名: 学 号: 班 级: 成 绩: 实验态度:1、认真 2、良好 3、一般 4、不认真实验成果:1、优秀 2、可信 3、一般 4、不真实实验报告:1、清晰完整 2、比较完整 3、不清晰 教师签名:_ 交报告日期: 年 月 日实验一 线性表的链表实现类的设计一、 需求分析本次程序设计要求建立一个以链表为储存方式的线性表,以及实现线性表所需求的各种功能。 对线性表的操作有:(1)输入形式为从键盘输入,用户根据界面的提示从键盘直接输入所对应的数即可。输入的值要求为整数类型,用户输入其它类型的数据时(例如字符串)会产生不可预

26、测的错误。(2)输出的界面为DOS窗口,系统按照用户输入的数据类型,将会把相应的输出结果显示到界面上。(3)程序可以建立一个以链表形式储存的线性表,对线性表可以进行查找、删除、插入、构造、销毁和获取链表长度的操作。 (4)以L1=0, 5, 9, 10, 12, 12, 17, 20, 24构造链表;找到重复的第二个元素12并删除它;在第五个元素后插入55;生成L2 = 33, 45, 50的链表并将它与L1的链表合并。二、 概要设计链表结点的数据结构:struct LinkNode /链表结点定义(数据类型为整形) int data; /数据域 LinkNode* link; /指针域 Li

27、nkNode(LinkNode* ptr = NULL)/仅初始化指针成员的构造函数 link = ptr; /初始化数据和指针成员的构造函数 LinkNode(const int x, LinkNode* ptr = NULL) data = x; link = ptr; ;链表类:class List /带头结点的单链表类的定义public: List()first = new LinkNode; /构造函数 List(const int x)first = new LinkNode(x); /构造函数 List(List& L); /复制构造函数 List() MakeEmpty();

28、/使链表为空表 delete first; /删除附加头结点 void MakeEmpty(); /将链表置为空表,保留头结点 int Length()const; /计算链表长度 LinkNode* Search(int x); /搜索含数据x的结点 LinkNode* Locate(int i); /返回第i个元素的地址 LinkNode* GetHead()const return first; /获取头结点地址 int GetData(int i); /取出第i个元素的值 void SetData(int i, int x);/用x修改第i个元素的值 bool Insert(int i

29、, int x);/在链表的第i个元素后插入x bool Remove(int i, int& x);/删除第i个元素,通过x返回其元素值 void AddTail(int x); /在链表尾部添加元素x void DeleteRepeatedElem();/删除表中重复元素 void MergeList(List& L); /将链表L链接在当前链表尾部 bool IsEmpty()const /判断表空 return first-link = NULL ? true : false; void Input(); /输入数据元素,建立表 void Display(); /显示表中元素 List

30、& operator = (List& L); /重载操作符:赋值= private: LinkNode* first;三、 详细设计List:List(List& L)/复制构造函数int val;LinkNode * srcPtr = L.GetHead();/被复制表的头结点地址LinkNode * desPtr = first = new LinkNode; /生成头结点while(srcPtr-link != NULL) /逐个结点复制 val = srcPtr-link-data; desPtr-link = new LinkNode(val); /开辟新结点内存,并为数据域赋值X

31、 desPtr = desPtr-link; srcPtr = srcPtr-link;desPtr-link = NULL;void List:MakeEmpty() /将链表置为空表,保留头结点LinkNode * p;while(first-link!=NULL)/当链不为空时,删除链中所有结点 p = first-link;first-link = p-link; /保存被删除结点的下一结点地址delete p; /删除从链上摘下的结点int List:Length()const /计算链表长度LinkNode * p = first-link;int length = 0;while

32、(p!= NULL)/扫描直到链尾 p = p-link;length +; return length;LinkNode* List:Search(int x) /搜索含数据x的结点,返回结点地址LinkNode * p = first-link;while(p!= NULL)/扫描直到链尾,找含有数据x的结点 if(p-data = x) break;else p = p-link; return p;LinkNode* List:Locate(int i) /返回第i个元素的地址if(i link;int k = 1;while(p!= NULL & k link;k+;return p

33、;int List:GetData(int i) /取出第i个元素的值if(i data;void List:SetData(int i, int x)/用x修改第i个元素的值if(i data = x;bool List:Insert(int i, int x)/在链表的第i个元素后插入x LinkNode* p = Locate(i); if(p = NULL) return false; LinkNode * newNode = new LinkNode(x); if(newNode = NULL) cerr存储分配错误!link = p-link; p-link = newNode;

34、return true;bool List:Remove(int i, int& x)/删除第i个元素,通过x返回其元素值 LinkNode* p = Locate(i-1); if(p = NULL | p-link = NULL) return false; LinkNode * del = p-link; p-link = del-link; x = del-data; delete del; return true;void List:AddTail(int x) /在链表尾部添加元素xLinkNode *p = first; /p指向头结点while(p-link != NULL)

35、/最终让指针p指向尾结点p = p-link;/ while/生成新结点由指针q指示LinkNode * newNode = new LinkNode(x);if(newNode = NULL) cerr存储分配错误!link = newNode;/给指针p-link重新赋值newNode-link = NULL;/尾指针赋NULLvoid List:DeleteRepeatedElem()/删除表中重复元素 int temp1, temp2, i, j;int length = Length();for(i = 1; i length; i+)temp1 = GetData(i);for(j

36、 = i+1; j = length; j+)temp2 = GetData(j);if(temp1 = temp2)Remove(j,temp1); /删除重复的结点length-;/ if/ for(j = i+1; j = length; j+)/ for(i = 1; i link = NULL) /链表L为空 delete q;/释放L的头结点 return;while(p-link != NULL) /最终让指针p指向链表尾结点p = p-link;/whilewhile(q-link != NULL) /逐个结点复制 int val = q-link-data; p-link =

37、 new LinkNode(val); /开辟新结点内存,并为数据域赋值X p = p-link; q = q-link;p-link = NULL;void List:Input() /输入数据元素,建立表 int val=0; cout val; if(val!=-1) AddTail(val); else break; void List:Display() /显示表中元素 if(IsEmpty()cout The list is empty!n;return;/ifcout 表中元素为: link != NULL)p = p-link;if(p-link != NULL) cout d

38、ata , ; else cout data link != NULL) /逐个结点复制 val = srcPtr-link-data; desPtr-link = new LinkNode(val); /开辟新结点内存,并为数据域赋值X desPtr = desPtr-link; srcPtr = srcPtr-link;desPtr-link = NULL;return *this;四、 调试分析在调试过程中,发现合并链表操作时不能简单将第二个链表的结点链接在第二个链表尾部,而不重新开辟存储空间(如下面的代码所示),这样在对象析构时会出现内存访问错误。void List:MergeList

39、(List& L) /将链表L链接在当前链表尾部 LinkNode *p = first; /p指向头结点 LinkNode *q = L.GetHead(); /q指向L头结点if(q-link = NULL) return;/链表L为空while(p-link != NULL) /最终让指针p指向链表尾结点p = p-link;/whilep = q-link;/ 链表L链接在链表尾部五、 用户使用说明本程序没有进行用户输入输出界面设计,所以用户在使用时,只是按照屏幕提示进行相关数据输入,对链表的具体操作过程,用户不能参与,有待今后完善。六、 运行结果显示程序主函数如下,输入测试数据后运行

40、结果如下图所示:int main(int argc, char *argv) List L1; int d; L1.Input(); /用户输入数据建立链表L1 L1.Display(); L1.DeleteRepeatedElem();/删除重复元素 L1.Display(); L1.Insert(5,55);/插入元素 L1.Display(); L1.Remove(6,d);/删除刚插入元素 L1.Display(); List L2; L2.Input(); /用户输入数据建立链表L2 L2.Display(); L1.MergeList(L2); /链表L2与链表L1合并 L1.Display(); system(PAUSE); return EXIT_SUCCESS;七、 实验思考与小结对单链表的遍历访问操作方法说明了对尾结点指针域初始化的重要性,链表的操作中要注意修改指针地址前不要丢失了指针以前指向的地址。头结点的开辟的确简化了操作和代码,对链表内存空间的释放也说明了链表是一种递归结构,同时其内存是在不连续的堆空间上分配的。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!