《数据结构》实验指导书 广东工业大学信息工程学院

合集下载

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书前言《数据结构》是软件工程等专业的一门核心基础课程,也是很多高校考研专业课之一。

它主要介绍线性结构、树结构、图结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。

这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。

通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。

学习这门课程,习题和实验是两个关键环节。

学生理解算法,上机实验是最佳的途径之一。

因此,实验环节的好坏是学生能否学好《数据结构》的关键。

为了更好地配合学生实验,特编写实验指导书。

一、实验目的更好的理解算法的思想、培养算法设计、分析及程序调试能力。

二、实验要求1、每次实验前学生必须根据试验内容认真准备实验程序及调试时所需的输入数据及预期输出数据。

2、独立完成或在指导教师的帮助下,完成实验项目,得出正确的实验结果。

3、遵守实验室规章制度、不缺席、按时上、下机。

4、实验学时内必须做数据结构的有关内容,不允许上网聊天或玩游戏,如发现上述现象,取消本次上机资格,平时成绩扣10分。

5、实验项目有一次未完成,扣5分,两次以上未完成者,平时成绩以零分记,不允许参加期末考试。

三、实验环境 VC++6.0或其它C++集成环境四、说明1、本实验的所有算法中元素类型可以根据实际需要选择。

2、实验题目中带*者为较高要求,学生可自选;其余部分为基本内容,必须完成,否则实验不合格。

3、数据结构是很多高校的硕士研究生入学考试的专业课之一,希望有志于考研的学生能够在学习过程中注意各种算法的理解,以便为考研做一定的准备。

4、所有实验项目布置在在线评测系统平台(Online Judge System)上,校内访问IP:59.73.73.133,每位学生需实名注册账号,并将完成的实验项目在平台上提交,平台能够实现自动评测。

数据结构实验指导书(C)

数据结构实验指导书(C)

《数据结构》实验指导书(适用于计算机应用、软件技术专业)信息工程系目录前言 (3)实验一、单链表的基本操作......................................................................... 错误!未定义书签。

实验二栈和队列........................................................................................... 错误!未定义书签。

实验三串....................................................................................................... 错误!未定义书签。

实验四二叉树的遍历................................................................................... 错误!未定义书签。

实验五树的应用........................................................................................... 错误!未定义书签。

实验六图....................................................................................................... 错误!未定义书签。

实验七、折半查找和二叉排序树................................................................. 错误!未定义书签。

实验八、内部排序......................................................................................... 错误!未定义书签。

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书适用所有开设数据结构实验的专业雷文赵攀编写概述一、课程目的《数据结构》是一门实践性很强的软件基础课程,为了学好这门课,每个学生必须完成一定数量的上机作业。

通过本课程的上机作业,要求在数据结构的选择和应用、算法的设计及实现等方面加深对课程基础内容的理解,同时,实验题中的问题比平时的练习题要复杂,也更接近实际,在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

本课程实验的目的是旨在使学生进一步巩固课堂上所学的理论知识;深化理解和灵活掌握教学内容;培养学生算法设计的能力和解决实际问题的程序设计的能力。

二、实验名称与学时分配三、实验要求⒈问题分析充分地分析和理解问题本身,弄清要求做什么,包括功能要求、性能要求、设计要求和约束以及基本数据特性,数据间的联系等。

⒉数据结构设计针对要求解决的问题,考虑各种可能的数据结构,并且力求从中出最佳方案(必须连同算法一起考虑),确定主要的数据结构及全程变量。

对引入的每种数据结构和全程变量要详细说明其功能、初值和操作特点。

⒊算法设计算法设计分概要设计和详细设计,概要设计着重解决程序的模块设计问题,这包括考虑如何把被开发的问题程序自顶向下分解成若干顺序模块,并决定模块的接口,即模块间的相互关系以及模块之间的信息交换问题.详细设计则要决定每个模块内部的具体算法,包括输入、处理和输出,采用类C语言描述。

⒋测试用例设计准备典型测试数据和测试方案,测试数据要有代表性、敏感性,测试方案包括模块测试和模块集成测试。

⒌上机调试对程序进行编译,纠正程序中可能出现的语法错误,测试前,先运行一遍程序看看究竟将会发生什么,如果错误较多,则根据事先设计的测试方案并结合现场情况进行错误跟踪,包括打印执行路径或输出中间变量值等手段。

三、实验考核每次实验结束后,均应上交实验报告。

数据结构课程实验成绩单独考核,占1个学分。

实验报告应包括如下内容:1、问题描述:简述题目要解决的问题是什么。

数据结构课程实验指导书

数据结构课程实验指导书

《数据结构》实验指导书第一部分前言一、实验的目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。

本课程的另一重要教学目的是训练学生进行复杂程序设计的技能和培养良好程序设计的习惯,要做到这一点,上机实习是必须的。

数据结构实验是对学生的一种全面综合训练,是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,实验课题中的问题比平时的习题复杂得多,也更接近实际。

实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,训练学生实际动手进行程序设计和调试程序的能力,加深对数据结构相关概念和算法的理解。

通过完成本实验课程的实验,学生应学会并掌握本课程的基本和重点知识,深刻理解逻辑结构、物理结构和算法设计之间的关系,初步学会算法分析的方法,并能在一定范围内运用所掌握的分析方法进行算法分析,培养软件工作所需要的动手能力和作为一个软件工作者所应具备的科学工作方法和作风。

二、实验前的准备工作1.每个学生需配备一台计算机,操作系统需Windows2000/XP以上版本,软件需Visual C++6.0以上版本。

2.实验前要求学生按实验要求编写好相关实验程序,准备上机调试运行。

三、实验的步骤(一)建立一个文件夹,如“数据结构”,用来存放自己的所有实验程序,在该文件夹中建立子目录用来存放每个项目(一个子目录一个项目),如“顺序表”,项目中需要的所有文件都存在该文件夹中。

(二)新建一个项目文件1.双击Visual C++ 6.0快捷图标,进入Visual C++ 6.0集成开发环境;或者点击“开始”→“程序”→“Microsoft Visual Studio 6.0”→“Microsoft Visual C++ 6.0”进入Visual C++ 6.0集成开发环境。

2.单击“File”菜单,选择“New”命令3.创建一个项目文件并保存在项目所在文件夹中;3. 创建源程序文件并保存在项目所在文件夹中;4.输入源程序;5.单击“保存”按钮保存源程序。

《数据结构》实验指导书

《数据结构》实验指导书

《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课, 上机实习是对学生的一种全面综合训练, 是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。

实习着眼于原理与应用的结合, 使学生学会把学到的知识用于解决实际问题, 起到深化理解和灵活掌握教学内容的目的。

同时, 通过本课程的上机实习, 使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。

实习包括的步骤1. 简要描述题目要求, 对问题的描述应避开算法及所涉及的数据类型, 只是对所需完成的任务做出明确的陈述, 例如输入数据的类型、值的范围以及输入的形式, 输出数据的类型、值的范围以及输出的形式。

2. 选定数据结构, 写出算法, 根据自顶向下发展算法的方法, 首先描述算法的基本思想, 然后进行算法细化, 再对所设计的算法的时间复杂性和空间复杂性进行简单分析。

3. 准备好上机所需的程序, 选定一种程序设计语言(如C 语言), 手工编好上机程序, 并进行反复检查, 使程序中的逻辑错误和语法错误减少到最低程度。

对程序中有疑问的地方, 应做出标记, 以便在上机时给予注意。

4.上机输入和调试程序, 在调试程序过程中除了系统的问题以外, 一般应自己独立解决。

在程序调试通过后, 打印输出程序清单和运行结果。

5.上机结束后, 总结和整理实习报告。

实习报告的内容1.简述题目要解决的问题是什么, 并说明输入和输出数据的形式。

2.简述存储结构和算法的基本思想。

3.列出调试通过的源程序。

4.列出上面程序对应的运行结果。

分析程序的优缺点、时空性能以及改进思想, 写出心得体会。

实验一线性表一. 目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现, 提高分析和解决问题的能力。

要求仔细阅读并理解下列例题, 上机通过, 并观察其结果, 然后独立完成后面的实习题。

数据结构实验指导书(本科正式)

数据结构实验指导书(本科正式)

《数据结构》实验指导书实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。

【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。

(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。

若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。

若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。

【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立线性表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素1、通过键盘读取元素建立单链表;2、指定一个元素,在此元素之前插入一个新元素;3、指定一个元素,删除此元素。

三、用C语言编程实现两个按递增顺序排列线性表的合并1、编程实现合并按递增顺序排列的两个顺序表算法;2、编程实现合并按递增顺序排列的两个单链表算法。

【思考问题】结合实验过程,回答下列问题:1、何时采用顺序表处理线性结构的问题为最佳选择;2、何时采用链表处理线性结构的问题为最佳选择。

【实验报告要求】1、根据对线性表的理解,如何创建顺序表和单链表;2、实现顺序表插入和删除操作的程序设计思路;3、实现链表插入和删除操作的程序设计思路;4、实现两表合并操作的程序设计思路;5、调试程序过程中遇到的问题及解决方案;6、本次实验的结论与体会。

数据结构课程实验指导书

数据结构课程实验指导书

数据结构实验指导书一、实验目的《数据结构》是计算机学科一门重要的专业基础课程,也是计算机学科的一门核心课程。

本课程较为系统地论述了软件设计中常用的数据结构以及相应的存储结构与实现算法,并做了相应的性能分析和比较,课程内容丰富,理论系统。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

由于以下原因,使得掌握这门课程具有较大的难度:1)理论艰深,方法灵活,给学习带来困难;2)内容丰富,涉及的知识较多,学习有一定的难度;3)侧重于知识的实际应用,要求学生有较好的思维以及较强的分析和解决问题的能力,因而加大了学习的难度;根据《数据结构》课程本身的特性,通过实验实践内容的训练,突出构造性思维训练的特征,目的是提高学生分析问题,组织数据及设计大型软件的能力。

课程上机实验的目的,不仅仅是验证教材和讲课的内容,检查自己所编的程序是否正确,课程安排的上机实验的目的可以概括为如下几个方面:(1)加深对课堂讲授内容的理解实验是对学生的一种全面综合训练。

是与课堂听讲、自学和练习相辅相成的必不可少的一个教学环节。

通常,实验题中的问题比平时的习题复杂得多,也更接近实际。

实验着眼于原理与应用的结合点,使学生学会如何把书上学到的知识用于解决实际问题,培养软件工作所需要的动手能力;另一方面,能使书上的知识变"活",起到深化理解和灵活掌握教学内容的目的。

不少学生在解答习题尤其是算法设计时,觉得无从下手。

实验中的内容和教科书的内容是密切相关的,解决题目要求所需的各种技术大多可从教科书中找到,只不过其出现的形式呈多样化,因此需要仔细体会,在反复实践的过程中才能掌握。

(2)培养学生软件设计的综合能力平时的练习较偏重于如何编写功能单一的"小"算法,而实验题是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧,多人合作,以至一整套软件工作规范的训练和科学作风的培养。

《数据结构》实验指导书(新教学计划)

《数据结构》实验指导书(新教学计划)

数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (1)目录 (1)实验指导书概述 (2)实验题目 (3)实验一单链表的插入、删除 (3)[实验目的] (3)[实验内容] (3)[测试数据] (3)[实现提示] (3)实验二栈及其应用 (5)[实验目的] (5)[实验内容] (5)[测试数据] (5)实验三二叉树的递归算法 (5)[实验目的] (5)[实验内容] (6)[测试数据] (6)实验四查找及排序算法的应用 (7)[实验目的] (7)[实验内容] (7)[测试数据] (7)实验指导书概述“数据结构”是计算机专业一门重要的专业技术基础课程,是一门关键性核心课程。

本课程系统地介绍了软件设计中常用的数据结构以及相应的存储结构和实现算法,介绍了多种常用的查找和排序技术,并对其进行了性能分析和比较,内容非常丰富。

本课程的学习将为后续课程的学习以及软件设计水平的提高打下良好的基础。

由于以下原因,使得掌握这门课程具有较大难度:∙内容多,时间短,给学习带来困难;∙贯穿全书的动态链表存储结构和递归技术是学习中的重点和难点;∙隐含在各部分的技术和方法丰富,也是学习的重点和难点;∙先修课程中所介绍的专业性知识不多,加大了学习难度。

由于数据结构课程的技术性与实践性,《数据结构课程实验》的设置十分必要。

为了帮助学生更好地学习本课程,理解和掌握算法设计所需的技术,为整个专业学习打好基础,要求运用所学知识,上机解决一些典型问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握所用到的一些技术。

数据结构中稍微复杂一些的算法设计中可能同时要用到多种技术和方法,如算法设计的构思方法,动态链表,算法的编码,递归技术,与特定问题相关的技术等,要求重点掌握线性链表、二叉树和树、图结构、数组结构相关算法的设计。

在掌握基本算法的基础上,掌握分析、解决实际问题的能力。

通过实验实践内容的训练,突出构造性思维训练的特征, 提高学生组织数据及编写大型程序的能力。

《数据结构》实验指导书(Java语言版).

《数据结构》实验指导书(Java语言版).

《数据结构》课程实验指导《数据结构》实验教学大纲课程代码:0806523006 开课学期:3 开课专业:信息管理与信息系统总学时/实验学时:64/16 总学分/实验学分:3.5/0.5一、课程简介数据结构是计算机各专业的重要技术基础课。

在计算机科学中,数据结构不仅是一般程序设计的基础,而且是编译原理、操作系统、数据库系统及其它系统程序和大型应用程序开发的重要基础。

数据结构课程主要讨论各种主要数据结构的特点、计算机内的表示方法、处理数据的算法以及对算法性能的分析。

通过对本课程的系统学习使学生掌握各种数据结构的特点、存储表示、运算的原理和方法,学会从问题入手,分析研究计算机加工的数据结构的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储机构及其相应的操作算法,并初步掌握时间和空间分析技术。

另一方面,本课程的学习过程也是进行复杂程序设计的训练过程,通过对本课程算法设计和上机实践的训练,还应培养学生的数据抽象能力和程序设计的能力。

二、实验的地位、作用和目的数据结构是一门实践性较强的基础课程,本课程实验主要是着眼于原理和应用的结合,通过实验,一方面能使学生学会把书上学到的知识用于解决实际问题,加强培养学生如何根据计算机所处理对象的特点来组织数据存储和编写性能好的操作算法的能力,为以后相关课程的学习和大型软件的开发打下扎实的基础。

另一方面使书上的知识变活,起到深化理解和灵活掌握教学内容的目的。

三、实验方式与基本要求实验方式是上机编写完成实验项目指定功能的程序,并调试、运行,最终得出正确结果。

具体实验要求如下:1.问题分析充分地分析和理解问题本身,弄清要求,包括功能要求、性能要求、设计要求和约束,以及基本数据特性、数据间联系等等。

2.数据结构设计针对要解决的问题,考虑各种可能的数据结构,并且力求从中选出最佳方案(必须连同算法实现一起考虑),确定主要的数据结构和全程变量。

对引入的每种数据结构和全程变量要详细说明其功用、初值和操作的特点。

【免费下载】广工数据结构实验指导书(2015春)

【免费下载】广工数据结构实验指导书(2015春)
习题的作用在于帮助学生深入理解教材内容 , 巩固基本概念, 达到培养良好程序设计能力和习 惯的目的。从认知的程度划分,数据结构的习题通常可分为三类:基础知识题、算法设计题和综 合实习题。基础知识题主要是检查对概知识的识记和理解,一般可作为学生自测题。算法设计 题的目的是练习对原理方法的简单应用,多数是要求在某种数据存储结构上实现某一操作,是数 据结构的基础训练,构成了课外作业的主体。综合实习题则训练对知识的综合应用和软件开发能 力,主要是针对具体应用问题,选择、设计、和实现抽象数据类型( ADT)的可重用模块,并以 此为基础开发满足问题要求的小型应用软件,应将其看作软件工程的综合性基础训练的重要一环, 给予足够的重视。
第 1 章 概述
1.1 课程、教材和实验
数据结构是计算机科学的算法理论基础和软件设计的技术基础,主要研究信息的逻辑结构及 其基本操作在计算机中的表示和实现。数据结构不仅是计算机专业的核心课程,而且已成为其他 理工专业的热门选修课。课程的教学要求之一是训练学生进行复杂程序设计的技能和培养良好程 序设计的习惯, 其重要程度决不亚于知识传授。因此,在数据结构的整个教学过程中 , 完成习题 作业和上机实习是两个至关重要的环节。
数据结构及其算法的教学难点在于它们的抽象性和动态性。虽然在书本教材和课堂授课(板 书或投影胶片)中采用图示可以在一定程度上化抽象为直观,但很难有效展现数据结构的瞬间动 态特性和算法的作用过程。 我们自主研发的“C 程序可视化运行调试集成环境 AnyviewC”,以及 基于 AnyviewC 开发的数据结构、C 程序设计、离散数学等课程的 “编程作业与实验可视化网络 平台”,打破了程序运行调试黑箱。学生可 通过 AnyviewC 平台可在线编写和可视化调试自己编写 的程序,并接受系统的实时自动测评,极大提高了学生程序设计训练的效率和效果 。教师也可从 繁重的书面作业批改工作中解脱出来,转到有针对性的现场指导和习题讲评上。借助于互联网, AnyviewC 平台将实验室“全天候”和“跨时空”地拓广到每位学生个人的微机或移动终端上 。

数据结构实验指导书

数据结构实验指导书

《数据结构》实验指导书贵州大学电子信息学院通信工程目录实验一顺序表的操作 (3)实验二链表操作 (8)实验三集合、稀疏矩阵和广义表 (19)实验四栈和队列 (42)实验五二叉树操作、图形或网状结构 (55)实验六查找、排序 (88)贵州大学实验报告 (109)实验一顺序表的操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、熟练掌握线性表的基本操作在顺序存储和链式存储上的实现。

2、以线性表的各种操作(建立、插入、删除等)的实现为重点。

3、掌握线性表的动态分配顺序存储结构的定义和基本操作的实现。

二、实验内容及步骤要求1、定义顺序表类型,输入一组整型数据,建立顺序表。

typedef int ElemType; //定义顺序表struct List{ElemType *list;int Size;int MaxSize;};2、实现该线性表的删除。

3、实现该线性表的插入。

4、实现线性表中数据的显示。

5、实现线性表数据的定位和查找。

6、编写一个主函数,调试上述算法。

7、完成实验报告。

三、实验原理、方法和手段1、根据实验内容编程,上机调试、得出正确的运行程序。

2、编译运行程序,观察运行情况和输出结果。

四、实验条件运行Visual c++的微机一台五、实验结果与分析对程序进行调试,并将运行结果进行截图、对所得到的的结果分析。

六、实验总结记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等,并将其写入实验报告中。

【附录----源程序】#include<stdio.h>#include<iostream>using namespace std;typedef int ElemType;struct List{ElemType *list;int Size;int MaxSize;};//初始化线性表bool InitList(List &L){L.MaxSize=20;L.list=new ElemType[L.MaxSize];for(int i=0;i<20&&L.list==NULL;i++){L.list=new ElemType[L.MaxSize];}if(L.list==NULL){cout<<"无法分配内存空间,退出程序"<<endl;return false;}L.Size=0;return true;}//向线性表中插入元素bool InsertList(List &L,int pos,ElemType item){if(pos>L.Size+1||pos<1){cout<<"位置无效"<<endl;return false;}else if(L.Size==L.MaxSize){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,2*L.MaxSize*k);if(L.list==NULL){cout<<"动态分配内存失败,退出运行"<<endl;return false;}L.MaxSize=2*L.MaxSize;}for(int i=L.Size-1;i>=pos-1;i--){L.list[i+1]=L.list[i];}L.list[pos-1]=item;L.Size++;return true;}//删除线性表中的元素bool DeleteList(List &L,ElemType &item,int pos){if(L.Size==0){cout<<"线性表中没有元素,无法删除"<<endl;return false;}if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}item=L.list[pos-1];for(int i=pos;i<L.Size;i++)L.list[i-1]=L.list[i];L.Size--;if(float(L.Size)/L.MaxSize<0.4&&L.Size>10){int k=sizeof(ElemType);L.list=(ElemType*)realloc(L.list,L.MaxSize*k/2);L.MaxSize=L.MaxSize/2;}return true;}//输出线性表bool Print(List &L){if(L.Size==0){cout<<"线性表中无元素"<<endl;return false;}cout<<"线性表为:"<<endl;for(int i=0;i<L.Size;i++){cout<<L.list[i]<<" ";}cout<<"线性表长度为"<<L.Size<<endl;return true;}//查找数据bool GetList(List L,ElemType item,int pos){if(pos<1||pos>L.Size){cout<<"位置无效"<<endl;return false;}int k;cout<<"按位置查找选择1,按元素查找选择0"<<endl;cin>>k;if(k==1){cout<<"第"<<pos<<"个元素为"<<L.list[pos-1]<<endl;return true;}else if(k==0){for(int i=0;i<L.Size;i++){if(L.list[i]==item)cout<<"你要找的元素为"<<":"<<item<<"在第"<<i+1<<"个"<<endl;if(i==L.Size){cout<<"没有你要找的元素"<<endl;return false;}}}else{cout<<"查找无效,请选择0或1"<<endl;return false;}}void main(){List m;InitList(m);//初始化线性表Print(m);cout<<"请输入十个数据"<<endl;for(int i=0;i<10;i++){cin>>m.list[i];m.Size++;}Print(m);cout<<"向线性表中第r个位置插入s"<<endl;cout<<"请输入r,s"<<endl;int r;ElemType s;cin>>r>>s;cout<<"(m,r,s)"<<endl;//向线性表中插入元素InsertList(m,r,s);Print(m);cout<<"查找数据s或者查找第r个数据"<<endl;cin>>s>>r;GetList(m,s,r);Print(m);ElemType f=0;cout<<"删除第r个数据"<<endl;cin>>r;DeleteList(m,f,r);Print(m);cout<<"删除的数据是"<<f<<endl;}实验二链表操作实验学时:2学时实验类型:验证实验要求:必修一、实验目的和要求1、掌握链表的概念,了解线性表的链式存储结构,学会定义线性表的链式存储结构。

数据结构实验指导书

数据结构实验指导书

2016年3月前言数据结构是计算机专业的必修、主干课程之一,它旨在使学生学会分析、研究计算机加工的数据对象的特性,学会把数据的组织方法,以便选择合适的数据逻辑结构和存储结构,以及相应的运算(操作),把现实世界中的问题转化为计算机内部的表示和处理,这是一个良好的环节。

为了指导和帮助学生更好地学习、实践数据结构这门课程,我编写了这本实验指导书。

《数据结构实验指导书》列举了数据结构课程设计实例,通过综合训练,能够培养学生实际分析问题、解决问题、编程和动手操作等多方面的能力,最终目的是帮助学生系统地掌握该门课程的基本内容,并运用所学的数据结构知识去解决实际问题。

指导书中共有十个实验,内容包括数据结构课程设计概述、线性表、栈、队列、树状结构、图状结构、查找和排序等问题的应用。

《数据结构实验指导书》是一本独立于具体的数据结构教材的辅导书,通过针对每种数据结构的具体实例,循序渐进地启发学生完成设计。

书中给出的实例都是完整可运行的,同时给出了测试样例、总结与思考等,辅助学生学习的教学辅导参考书。

目录实验一:一元二次方程的求解 (1)实验二:线性表—顺序表 (2)实验三:线性表—单链表 (3)实验四:栈和队列—数制转换 (5)实验五:栈和队列—模拟病人到医院排队看病 (6)实验六:树—二叉树的建立与遍历 (7)实验七:树—二叉树遍历的应用 (8)实验八:图—图的建立与遍历 (9)实验九:查找算法设计与实现 (11)实验十:排序算法设计与实现 (12)实验一:一元二次方程的求解一、实验目的:1、熟悉C语言的上机环境,掌握C语言的基本语法和结构2、熟悉定义函数和函数声明的方法3、熟悉函数实参和形参的对应关系4、学习对文件程序的编译和运行二、实验内容与步骤:1、求方程ax2+bx+c=0的解,用3个调用函数实现b2-4ac=0,>0,<0的情况2、定义三个函数用作主函数的调用3、编写主函数三、实验平台与课时安排:Visual C++ 6.0集成环境;2课时四、实验设计方案:1、a=0 不是二次方程2、b2-4ac>0,有两个不等实根3、b2-4ac<0,有两个共轭复根【运行结果】程序运行结果如图1所示。

《数据结构》实验指导书

《数据结构》实验指导书

《数据结构》实验指导书实验指导书课程名称:数据结构计算机科学与工程系《数据结构》课程组目录前言 .................................... 1 一、实验的作用和目的 ..................... 2 二、实验方式与考核方式................... 2 三、实验要求 ............................. 3 四、实验报告要求......................... 4 五、实验内容 .. (5)实验一线性表应用 (5)实验二栈与队列应用 (10)实验三二叉树的操作 (14)实验四图的遍历 ................................................18 实验五查找算法应用 (21)六、选做实验内容 (24)实验六排序 ................................................ ....24 实验七数组和广义表 (26)实验八串 ................................................ . (27)前言《数据结构》数据结构是计算机科学与技术及相关专业的一门重要专业基础课,它主要介绍线性结构、树型结构、图状结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法,以及算法的时间、空间效率分析。

这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。

通过本课程的学习,使学生熟练地掌握数据结构的内在逻辑关系及其在计算机中的表示方法,以及相关基本操作的算法实现;掌握典型算法的设计思想及程序实现;熟悉各种数据结构在计算机科学中的基本应用;培养和训练学生结合实际应用,根据实际问题选取合适的数据结构、存储方案设计出简洁、高效、实用的算法;并为学习《操作系统》、《编译原理》、《数据库原理》等后续课程和研制开发各种系统和应用软件打下扎实的理论与实践基础。

《数据结构》实验指导书

《数据结构》实验指导书

实验一线性表的操作一、实验目的1.掌握在VC++6.0的集成环境中调试程序的基本方法。

2.掌握线性表的插入和删除操作在顺序存储结构和链式存储结构上的实现。

二、实验内容(三选一)(一)线性表的插入和删除操作在顺序存储结构和链式存储结构上的实现。

(1)线性表的插入和删除操作在顺序存储结构上的实现。

其中函数ListInsert_Sq的功能是在顺序线性表中第i个元素之前插入一个元素,函数ListDelete_Sq的功能是删除顺序线性表中第i个元素。

#define LIST_INIT_SIZE 1000#define LISTINCREMENT 10#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define OK 1#define ERROR 0#define OVERFLOW -2//顺序表的存储结构定义typedef int Status;typedef int ElemType;typedef struct{ElemType *elem; //首地址int length; //顺序表的长度int listsize; //顺序表的存储容量} SqList;Status InitList_Sq(SqList &L) // 顺序表的初始化{}// InitList_Sq(Status ListInsert_Sq (SqList &L, int i, ElemType e) //插入{ //在顺序表的第i个位置插入值e为的元素}// ListInsert_SqStatus ListDelete_Sq(SqList &L, int i, ElemType &e) //删除{ //在顺序表的第i个位置删除一个元素,值在存进e中}// ListDelete_Sqint main( ){ElemType y;SqList L;int i,n;InitList_Sq(L); /* 初始化线性表*/printf("输入顺序表需存进的元素数量!\n");scanf("%d",&n);while(n<1 || n>10){printf("请输入1--10之间的整数!\n");scanf("%d",&n);}/* 以上循环语句的功能是控制输入数据个数的合法性,可以修改*/printf("依次输入存进顺序表中的数据元素:\n");for(i=1;i<=n;i++){scanf(“%d”,&y);ListInsert_Sq(L,i,y) ;}/* 以上循环语句的功能是依次输入要存进顺序表中的元素,并存进顺序表*/printf("顺序表中的元素为:");for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);/* 以上循环语句的功能是依次输出顺序表中的元素*/printf("\n");printf(“输入要删除元素的位置!\n”);scanf(“%d”,&n);if(ListDelete_Sq(L,n,y)==OK) { printf(“删除成功!”); printf("被删除的元素是:%d\n",y); }printf("顺序表中的元素为:");for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);/* 以上循环语句的功能是依次输出顺序表中的元素*/printf("\n");system("pause");return 0;}实验程序运行示例:(2)线性表的建立、插入、删除、打印和查找操作在链式存储结构上的实现。

《数据结构》实验书

《数据结构》实验书

目录实验一线性表基本操作的编程实现 (201)实验二堆栈或队列基本操作的编程实现 (49)实验四二维数组基本操作的编程实现 (18)实验五二叉树基操作的编程实现 (20)实验六图基本操作的编程实现 (45)(特别提示:程序设计包含两个方面的错误。

其一是错误,其二是能错误。

为了提高学生的编程和能力,本指导书给出的程序代码并的两种错误。

并且也不保证程序的完整性,有一些语句已经故意删除,就是要求学生自己编制完成,这样才能达到我们的要求。

希望大家以自己所学高级语言的基本功和点为基础,不要过于依赖给出的参考代码,这样才能有所进步。

如果学生能够根据要求完全自己编制,那就不好了。

)实验一线性表基本操作的编程实现【实验目的】线性表基本操作的编程实现要求:线性表基本操作的编程实现(2学时,验证型),掌握线性表的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找、逆序、排序等操作,存储结构可以在顺序结构或链表结分主要功能,也可以用菜单进行管理完成大部分功能。

还鼓励学生利用基本操作进行一些更实际的应用型程序设计。

【实验性质】【实验内容】把线性表的顺序存储和链表存储的数据插入、删除运算其中某项进行程序实现。

建议实现键盘输入数据以实现程序的通据的函数。

【注意事项】【思考问题】1.线性表的顺序存储和链表存储的差异?优缺点分析?2.那些操作引发了数据的移动?3.算法的时间效率是如何体现的?4.链表的指针是如何后移的?如何加强程序的健壮性?【参考代码】(一)利用顺序表完成一个班级学生课程成绩的简单管理1、预定义以及顺序表结构类型的定义(1)#define ListSize //根据需要自己设定一个班级能够容纳的最大学生数(2)typedef struct Stu{int num; //学生的学号char name[10]; //学生的姓名float wuli; //物理成绩float shuxue; //数学成绩float yingyu; //英语成绩}STUDENT; //存放单个学生信息的结构体类型typedef struct List{stu[ListSize]; //存放学生的数组定义,静态分配空间int length; //记录班级实际学生个数}LIST; //存放班级学生信息的顺序表类型2、建立班级的学生信息void listcreate(LIST *Li,int m) //m为该班级的实际人数{int i;Li->length=0;for(i=0;i<m;i++) //输入m个学生的所有信息{printf("please input the %dth student's information:\n",i+1);printf("num=");scanf("%d", ); //输入第i个学生的学号printf("name=");scanf("%s", ); //输入第i个学生的姓名printf("wuli=");scanf("%f", ); //输入第i个学生的物理成绩printf("shuxue=");scanf("%f", ); //输入第i个学生的数学成绩printf("yingyu=");scanf("%f", ); //输入第i个学生的英语成绩Li->length++; //学生人数加1}}3、插入一个学生信息int listinsert(LIST *Li,int i) //将学生插入到班级Li的第i个位置。

《数据结构》实 验 指 导 书.doc

《数据结构》实 验 指 导 书.doc

《数据结构(C#)》实验指导书软件学院—、上机实验的指导思想和要求1.1 上机实验的目的上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。

上机实验的目的是:(1)加深对讲授内容的理解,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,通过多次上机,就能自然地、熟练地掌握。

(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C#程序开发的环境。

一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。

使用者应该了解为了运行一个C#程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。

每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会。

(3)学会上机调试程序。

也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。

经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。

而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。

要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。

对程序设计来说,则要求会编程序并上机调试通过。

因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。

调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。

别人的经验不能代替自己的经验。

调试程序的能力是每个程序设计人员应当掌握的一项基本功。

因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数据结构》实验指导书广东工业大学信息工程学院下面介绍一下数据结构实验环境的启动,教材里的算法使用类C语言描述,具体实现需要支持ANSI C++标准的编译器。

考虑到同学们的基础和使用习惯,我们利用Windows环境下的Visual C++来进行实验。

首先启动Visual C++,从开始——程序——Visual C++,启动好Visual C++界面如图1所示:点击菜单“文件”出现下拉菜单,选择“新建”,如下图:在上面的界面里,我们选择Win32 Console Application选项,并在工程栏目里输入一个文件名,位置根据自己的保存路径设置即可,确定后回车,出现如下界面:再点击完成,出现下面的界面:点击“OK”,出现如下界面:在上面界面里,我们开始做实验时,只要通过“文件”菜单来添加源文件或头文件进入到程序编辑状态,如下图所示:点击“OK”后进行程序编辑窗口,如下所示:这时就可以编辑程序了。

实验时将头文件(.h后缀文件)放在header files 里,而源文件(.cpp后缀文件)放在source files里进行编辑调试。

实验一:线性表的存储结构与顺序表的存储实现实验内容:编写一个程序实现两个有序(从小到大)顺序表合并成为一个顺序表,合并后的结果放在第一个顺序表中。

实验目的:了解并掌握线性表的逻辑结构特性,通过实验掌握顺序存储结构的描述方法及用高级语言进行编程实现的方法。

实验步骤:1.定义顺序表类型和结构:首先要想好自己定义的顺序表叫什么名称,顺序表结构里包括有什么项目,每一项该是什么类型,如:typedefstruct{ElemType *elem;int length;intlistsize;} SqList;2.将定义好的顺序表初始化,如:Status InitList_Sq(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;}3.创建顺序表,如:void Create_Sq(SqList&L){ //创建顺序表inti,n;printf("创建一个有序表:\n");printf("输入有序表中元素的个数:");scanf("%d",&n);L.length=n;for(i=0;i<n;i++){printf("输入第%d个元素的值:",i+1);scanf("%d",&L.elem[i]);printf("\n");}}4.编写顺序表的元素输出函数voidDisp_Sq(SqList L){inti,n;n=L.length;for(i=0;i<n;i++)printf("%5d",L.elem[i]);printf("\n");}5.编写合并程序,实现题目要求的合并功能void Combine(SqList&La, SqList&Lb){//把两个有序表合为一个函数体请同学们自己编}实验二:栈和队列的应用一、实验目的熟练掌握栈结构及其应用二、实验内容利用栈结构具有先进后出的特性,编程实现:输入一个任意十进制数,转换八进制数进行输出。

1、定义栈结构,如:#define stack_size 100#define stackincrement 10typedefstruct{int *base;int *top;intstacksize;}SqStack;2.设计基本算法1)对栈进行初始化:Status InitStack (SqStack&S) {//构造一个空栈S.base = (Selemtype *)malloc(stack_size * sizeof(ElemType));if (!S.base) exit (OVERFLOW);S.top = S.base;S.stacksize = stack_size;return OK;}//InitStack2) 返回栈顶函数:Status GetTop(SqStackS,Selemtype&e){//若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if (S.top ==S.base) return ERROR;e = *(S.top-1);return OK;}// GetTop3)入栈函数Status Push (SqStack&S,Selemtype e) {//插入元素e为新的栈顶元素if (S.top - S.base>=S.stacksize){//栈满,追加存储空间S.base = (ElemType*)realloc (S.base,(S.stacksize + stackincrement) * sizeof (ElemType));if (!S.base) exit (OVERFLOW);//存储分配失败S.top = S.base+S.stacksize;S.stacksize +=stackincrement;}*S.top++=e;return OK;}//Push4)栈空处理函数Status StackEmpty(SqStack&S){if (S.base == S.top) return OK;else return ERROR;} // StackEmpty5)出栈函数Status Pop(SqStack&S,Selemtype&e){//若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK//,否则返回ERRORif (S.top==S.base) return ERROR;e=*--S.top;return OK;}//Pop6)设计数制转换算法,编写转换函数conversion().void conversion(structSqStack&S){数制转换算法由同学们自己完成}实验三:二叉树的构造与遍历方法一、实验目的通过实验能熟练掌握二叉树的定义、性质和存储结构;二叉树的遍历和线索以及遍历算法的各种描述形式。

二、实验内容用先序次序的方法构造一棵二叉树,并以三种遍历方式遍历二叉树。

三、实验步骤1、定义二叉树和用先序次序构造二叉树。

typedefstructBiTNode{//注意采用的是二叉链表作为二叉树的存储结构TElemType data;structBiTNode *lchild,*rchild;}BiTNode,*BiTree;Status CreateBiTree_PreOrder(BiTree&T){ //先序次序构造二叉树TElemTypech;scanf("%c",&ch);if(ch==' ') T=NULL;else {if(!(T=(BiTNode *)malloc(sizeof(BiTNode)))) exit(OVERFLOW);T->data=ch;CreateBiTree_PreOrder(T->lchild);CreateBiTree_PreOrder(T->rchild);}return OK;}2、根据先序遍历、中序遍历和后序遍历的方法编序相应的函数,如:Status PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){ //先序遍历if(T){if((*Visit)(T->data))if(PreOrderTraverse(T->lchild,Visit))if(PreOrderTraverse(T->rchild,Visit))return OK;return ERROR;}return OK;}Status InOrderTraverse(BiTree T, Status (*Visit)(TElemType e)){ //中序遍历if(T!=NULL){if(InOrderTraverse(T->lchild,Visit))if((*Visit)(T->data))if(InOrderTraverse(T->rchild,Visit))return OK;return ERROR;}else return OK;}Status PostOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){ //后序遍历if(T!=NULL){if(PostOrderTraverse(T->lchild,Visit))if(PostOrderTraverse(T->rchild,Visit))if((*Visit)(T->data))return OK;return ERROR;}else return OK;}3.编写各种遍历后的输出函数,如:Status Disp(TElemType e){ //输出各结点的数据值printf("%3c",e);return OK;}4.编写主函数调用以上各子函数,并调试程序以实现实验要求的各种遍历。

实验三图的遍历实验实验内容:从某个顶点出发,沿着某条搜索路径对图中所有顶点各作一次访问,试用程序完成图的遍历实验。

步骤:1.任务分析图有遍历是从图中某个顶点出发,沿某条搜索路径对图中的所有结点进行访问,而且仅访问一次。

遍历的流程图如图3.1所示,根据搜索的不同规则,遍历图的方法分为两种:深度优先遍历(DFS)和广度优先遍历(BFS)。

2.程序构思深度优先遍历其算法基本思想是:(1)选择一个起始点v0出发,并访问之;(2)依次从v0的未访问过的邻接点出发,深度优先遍历图,直到图中与v0有路径相通的顶点都被访问过为止;(3)如此时图中尚有顶点未被访问过,则另选图中一个未访问过的顶点作起始点,重复上述步骤过程,直到所有顶点都被访问过为止。

用流程图表示,如图3.2所示。

广度优先遍历其基本思想是:(1)选择一个起始点v0,并访问之;(2)从v0出发,依次访问v0的未被访问过的邻接顶点v1,v2,….v k,然后依次从v1,v2,….v k出发,访问各自来被访问过的邻接顶点;(3)重复步骤(2)直到所有顶点都被访问过为止。

相关文档
最新文档