数据结构上机实验指导共6页文档
- 格式:doc
- 大小:32.50 KB
- 文档页数:6
数据结构与算法实验指导书中国石油大学(北京)计算机科学与技术系前言《数据结构》是计算机及相关专业的一门核心基础课程,也是很多高校考研专业课之一。
它主要介绍线性结构、树结构、图结构三种逻辑结构元素的存储实现,在此基础上介绍一些典型算法及时、空效率分析。
这门课程的主要任务是培养学生的算法设计能力及良好的程序设计习惯。
通过学习,要求学生能够掌握典型算法的设计思想及程序实现,能够根据实际问题选取合适的存储方案,设计出简洁、高效、实用的算法,为后续课程的学习及软件开发打下良好的基础。
学习这门课程,习题和实验是两个关键环节。
学生理解算法,上机实验是最佳的途径之一。
因此,实验环节的好坏是学生能否学好《数据结构》的关键。
为了更好地配合学生实验,特编写实验指导书。
一、实验目的更好的理解算法的思想、培养编程能力。
二、实验要求1、每次实验前学生必须根据试验内容认真准备实验程序及调试时所需的输入数据。
2、在指导教师的帮助下能够完成实验内容,得出正确的实验结果。
3、实验结束后总结实验内容、书写实验报告。
4、遵守实验室规章制度、不缺席、按时上、下机。
5、实验学时内必须做数据结构的有关内容,不允许上网聊天或玩游戏,如发现上述现象,取消本次上机资格,平时成绩扣10分。
6、实验报告有一次不合格,扣5分,两次以上不合格者,平时成绩以零分记。
三、实验环境 VC++6.0或者VC2010四、说明1、本实验的所有算法中元素类型可以根据实际需要选择。
2、实验题目中带*者为较高要求,学生可自选;其余部分为基本内容,应尽量完成(至少完成70%,否则实验不合格)。
3、数据结构是很多高校的硕士研究生入学考试的专业课之一,希望有志于考研的学生能够在学习过程中注意各种算法的理解,以便为考研做一定的准备。
五、实验报告的书写要求1.明确实验的目的及要求;2.记录实验的输入数据和输出结果;3.说明实验中出现的问题和解决过程;4.写出实验的体会和实验过程中没能解决的问题;六、参考书目《数据结构》(C++语言描述)王红梅等清华大学出版社《DATA STRUCTURE WITH C++》 William Ford,William Topp清华大学出版社(影印版)实验平台控制台程序1、启动Microsoft VC6.0集成开发环境如图所示:2、单击“文件”菜单,选择“新建”项。
《数据结构》实验指导书软件学院2011年9月概述实习目的和要求《数据结构》在计算机科学中是一门实践性较强的专业基础课,上机实习是对学生的一种全面综合训练,是与课堂听讲、自习和练习相辅相成的必不可少的一个教学环节。
实习着眼于原理与应用的结合,使学生学会把学到的知识用于解决实际问题,起到深化理解和灵活掌握教学内容的目的。
同时,通过本课程的上机实习,使学生在程序设计方法及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
实习包括的步骤1.简要描述题目要求,对问题的描述应避开算法及所涉及的数据类型,只是对所需完成的任务做出明确的陈述,例如输入数据的类型、值的范围以及输入的形式,输出数据的类型、值的范围以及输出的形式。
2.选定数据结构,写出算法,根据自顶向下发展算法的方法,首先描述算法的基本思想,然后进行算法细化,再对所设计的算法的时间复杂性和空间复杂性进行简单分析。
3.准备好上机所需的程序,选定一种程序设计语言(如C语言),手工编好上机程序,并进行反复检查,使程序中的逻辑错误和语法错误减少到最低程度。
对程序中有疑问的地方,应做出标记,以便在上机时给予注意。
4.上机输入和调试程序,在调试程序过程中除了系统的问题以外,一般应自己独立解决。
在程序调试通过后,打印输出程序清单和运行结果。
5.上机结束后,总结和整理实习报告。
实习报告的内容1.简述题目要解决的问题是什么,并说明输入和输出数据的形式。
2.简述存储结构和算法的基本思想。
3.列出调试通过的源程序。
4.列出上面程序对应的运行结果。
5.分析程序的优缺点、时空性能以及改进思想,写出心得体会。
实验一线性表一.目的与要求本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。
要求仔细阅读并理解下列例题,上机通过,并观察其结果,然后独立完成后面的实习题。
二.例题[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。
《数据结构和算法》实验指导书实验及学时数分配序号实验名称学时数(小时)1 实验一线性表 42 实验二树和二叉树 23 实验三图 24 实验四查找 25 实验五内部排序 2合计12几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。
二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。
上机时签到;下机时验收签字。
三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。
实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。
【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。
(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。
若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。
若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。
【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。
1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。
程序设计是实践性很强的过程,任何程序最终都必须在计算机上运行,以检验程序的正确与否。
因此在学习程序设计中,一定要重视上机实践环节,通过上机可以加深理解C语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的能力与技巧。
一.C语言程序的上机步骤按照C 语言语法规则而编写的C 程序称为源程序。
源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII 码表示,并保存在扩展名为“.C”的文件中。
源程序是无法直接被计算机运行的,因为计算机的CPU 只能执行二进制的机器指令。
这就需要把A SCII 码的源程序先翻译成机器指令,然后计算机的CPU 才能运行翻译好的程序。
源程序翻译过程由两个步骤实现:编译与连接。
首先对源程序进行编译处理,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。
但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数库中的库函数。
因此,必须把“库函数”的处理过程连接到经编译生成的目标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。
C 语言程序的调试、运行步骤可以用图A-1 表示:图A-1 C 语言程序的调试、运行步骤图A-1 中,虚线表示当某一步骤出现错误时的修改路线。
运行时,无论是出现编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。
除了较简单的情况,一般的程序很难一次就能做到完全正确。
在上机过程中,根据出错现象找出错误并改正称为程序调试。
我们要在学习程序设计过程中,逐步培养调试程序目标程序的能力,它不可能靠几句话讲清楚,要靠自己在上机中不断摸索总结,它可以说是一种经验积累。
程序中的错误大致可分为三类:²程序编译时检查出来的语法错误;²连接时出现的错误;²程序执行过程中的错误。
〈数据结构〉上机实验指导数据结构是计算机科学中的一门重要课程,它研究的是数据的组织、存储和管理方式,以及对数据进行操作和处理的算法。
上机实验是数据结构课程的重要组成部分,通过实践操作,能够更好地理解和掌握数据结构的基本概念、算法和应用。
在进行〈数据结构〉上机实验之前,首先需要准备实验环境。
通常情况下,我们会使用一种编程语言来实现数据结构的相关操作,比如C++、Java等。
根据自己的实际情况和实验要求,选择一种合适的编程语言,并确保在实验环境中已经正确安装了相应的编译器或解释器。
接下来,我们可以开始进行具体的上机实验了。
下面以链表为例,介绍一下〈数据结构〉上机实验的指导步骤和要求:1. 实验目的:掌握链表的基本概念、操作和应用,理解链表与数组的区别和联系。
2. 实验原理:链表是一种动态数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。
链表的特点是插入和删除操作的时间复杂度为O(1),但是查找操作的时间复杂度为O(n)。
3. 实验步骤:3.1 创建链表:首先,我们需要定义一个链表的结构体,包含数据和指针两个成员变量。
然后,通过动态内存分配来创建链表的节点,并将节点之间通过指针连接起来,形成一个完整的链表。
3.2 插入节点:可以在链表的任意位置插入一个新的节点。
插入节点的操作包括:创建一个新的节点,将新节点的指针指向插入位置的下一个节点,将插入位置的前一个节点的指针指向新节点。
3.3 删除节点:可以删除链表中的任意一个节点。
删除节点的操作包括:将要删除的节点的前一个节点的指针指向要删除的节点的下一个节点,然后释放要删除的节点的内存空间。
3.4 遍历链表:可以通过遍历链表来访问链表中的每一个节点,并对节点进行相应的操作。
遍历链表的操作包括:从链表的头节点开始,依次访问每个节点,直到链表的尾节点。
3.5 查找节点:可以根据节点的值来查找链表中的某一个节点。
查找节点的操作包括:从链表的头节点开始,依次比较每个节点的值,直到找到目标节点或者链表结束。
《数据结构》课程上机实验指导书实验一【实验名称】顺序表的基本算法【实验目的】创建一个顺序表,掌握线性表顺序存储的特点。
设计和验证顺序表的查找、插入、删除算法。
【实验要求】(1)从键盘读入一组整数,按输入顺序形成顺序表。
并将创建好的顺序表元素依次打印在屏幕上。
(2)设计一个带选择菜单的主函数,菜单中具备任意选择删除、插入、查找数据元素的功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置或元素值,按指定方式删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号。
(4)每种操作结束后,都能在屏幕上打印出此时顺序表元素的遍历结果。
【实验步骤】1、实验前先写好算法。
2、上机编写程序。
3、编译。
4、调试。
例程:书上参考算法2-1,2-4,2-5,2-6,2-8!带菜单的主函数参考书上综合实例!注意:顺序表的结构体!typedef struct{datatype items[listsize];int length;}SpList;实验二【实验名称】单链表的基本算法【实验目的】创建一个单链表,掌握线性表链式存储的特点。
设计和验证链表的查找、插入、删除、求表长的算法。
【实验要求】(1)从键盘读入一组整数,按输入顺序形成单链表。
并将创建好的单链表元素依次打印在屏幕上。
(注意:选择头插法或者尾插法!)(2)设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置,按指定位置删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号;当选择求表长功能时,返回该单链表表长的数值。
(4)每种操作结束后,都能在屏幕上打印出此时单链表元素的遍历结果。
【实验步骤】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.单击“保存”按钮保存源程序。
数据结构上机实验本课程实验中已知的预定义常量和类型如下:#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;实验一顺序表(一)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。
二、 实验内容已知:线性表的动态分配顺序存储结构为#define LIST_INIT_SIZE 100#define LISTINCREMENT 10typedef struct{int *elem;int length;int listsize;}SqList;在主程序中调用如下函数实现构造线性表,在线性表中插入数值,最后输出线性表。
1. 编写函数,Status InitList(SqList *L) 实现构造一个空的线性表,若构造成功则返回OK,否则返回ERROR。
2. 编写函数,Status ListInsert(SqList *L , int i , int e) 实现在线性表L中第i个位置之前插入新的数据元素e,L的长度加1。
若插入成功返回OK,否则返回ERROR。
(提示:i的合法值为:i>=1&&i<=L—>length+1)3. 编写函数,void ListPrint(SqList *L)实现将线性表中的元素依次输出到屏幕上。
4.编写函数,int Menu(),输出菜单项请选择你要进行的操作(请输入1-4中的任一个数字):输入1:InitList2:ListInsert3:ListPrint4:Exit实验二顺序表(二)一、 实验目的掌握顺序表的定义、存储结构及其基本操作。
二、 实验内容在实验一的基础上,继续完成如下实验内容。
1.编写函数,Status ListDelete(Splist *L ,int i ,int *e),实现删除L的第i个数据元素,并用e返回其值,L的长度减1。
《数据结构》实验指导书实验一线性表【实验目的】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、本次实验的结论与体会。
《数据结构》实验指导《数据结构》C语言版实验指导目录《数据结构》上机实验的目的和要求 (1)实验一顺序结构线性表的实现 (3)实验二单链表的插入和删除 (16)实验三栈的实现 (24)实验四二叉树操作实现 (30)实验五哈夫曼树的建立与编码实现 (39)实验六图的遍历操作 (50)实验七排序 (67)实验八查找 (83)《数据结构》课程设计 (95)《数据结构》上机实验的目的和要求通过上机实验加深对课程内容的理解,增加感性认识,提高软件设计、编写及调试程序的能力。
要求所编的程序能正确运行,并提交实验报告。
实验报告的基本要求为:1、需求分析:陈述程序设计的任务,强调程序要做什么,明确规定:(1)输入的形式和输出值的范围;(2)输出的形式;(3)程序所能达到的功能;(4)测试数据:包括正确的输入输出结果和错误的输入及输出结果。
2、概要设计:说明用到的数据结构定义、主程序的流程及各程序模块之间的调用关系。
3、详细设计:提交带注释的源程序或者用伪代码写出每个操作所涉及的算法。
4、调试分析:(1)调试过程中所遇到的问题及解决方法;(2)算法的时空分析;(3)经验与体会。
5、用户使用说明:说明如何使用你的程序,详细列出每一步操作步骤。
6、测试结果:列出对于给定的输入所产生的输出结果。
若有可能,测试随输入规模的增长所用算法的实际运行时间的变化。
实验一顺序结构线性表的实现一、目的:掌握顺序表的表示方法,存储结构及其基本操作的实现。
二、要求:建立一顺序表,实现其基本操作。
三、示例程序:说明:一个完整的程序是由输入,处理,输出三部分组成的,每个部分还可以分为若干小部分,如输入,又可以分为声明,初始化变量,接收数据,预处理数据等。
书上列出的算法是解决问题的基本思路,也可以是解决问题的处理过程,并未给出详细的输入与输出,这一部分需要在练习过程中加入,在解决实际问题时,还需要做灵活的处理。
C语言本身有自身的特点,其基本思想是与机器的指令码相关的。
《数据结构与算法》实验指导书实验及学时数分配几点要求:一、上机前:认真预习相关实验内容,提前编写算法程序,上机时检查(未提前编写程序者,扣除平时成绩中实验相关分数)。
二、上机中:在Turbo C或VC6.0环境中,认真调试程序,记录调试过程中的问题、解决方法以及运行结果。
上机时签到;下机时验收签字。
三、下机后:按要求完成实验报告,并及时提交(实验后1周内)。
实验一线性表【实验目的】1、掌握用Turbo c上机调试线性表的基本方法;2、掌握线性表的基本操作,插入、删除、查找以及线性表合并等运算在顺序存储结构和链式存储结构上的运算;3、运用线性表解决线性结构问题。
【实验学时】4 学时【实验类型】设计型【实验内容】1、顺序表的插入、删除操作的实现;2、单链表的插入、删除操作的实现;3、两个线性表合并算法的实现。
(选做)【实验原理】1、当我们在线性表的顺序存储结构上的第i个位置上插入一个元素时,必须先将线性表中第i个元素之后的所有元素依次后移一个位置,以便腾出一个位置,再把新元素插入到该位置。
若是欲删除第i个元素时,也必须把第i个元素之后的所有元素前移一个位置;2、当我们在线性表的链式存储结构上的第i个位置上插入一个元素时,只需先确定第i个元素前一个元素位置,然后修改相应指针将新元素插入即可。
若是欲删除第i个元素时,也必须先确定第i个元素前一个元素位置,然后修改相应指针将该元素删除即可;3、详细原理请参考教材。
【实验步骤】一、用C语言编程实现建立一个顺序表,并在此表中插入一个元素和删除一个元素。
1、通过键盘读取元素建立线性表;(从键盘接受元素个数n以及n个整形数;按一定格式显示所建立的线性表)2、指定一个元素,在此元素之前插入一个新元素;(从键盘接受插入位置i,和要插入的元素值;实现插入;显示插入后的线性表)3、指定一个元素,删除此元素。
(从键盘接受删除元素位置i,实现删除;显示删除后的线性表)二、用C语言编程实现建立一个单链表,并在此表中插入一个元素和删除一个元素。
数据结构上机实验指导书计算机系第一部分数据结构课程实验概述一. 实验目的《数据结构》是计算机专业的主干课程和必修课程之一,其目的是让大家学习、分析和研究数据对象特征,掌握数据组织方法和计算机的表示方法,以便选择合适的数据逻辑结构和存储结构,设计相应的运算操作,把现实世界中的问题转化为计算机内部的表示与处理的方法,要求掌握算法的时间、空间复杂度分析基本技术,培养良好的程序设计风格,掌握进行复杂程序设计的技能。
在计算机科学领域,尤其是在系统软件和应用软件的设计和应用中要用到各种数据结构,因此,掌握数据结构对提高软件设计和程序编制水平有很大的帮助。
二. 实验要求2.1实验步骤设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。
因此必须严格执行良好的实验步骤规范(包括上机操作规范)。
本课程实验的基本步骤是:2.1.1问题分析充分地分析和理解问题本身,明确问题要求做什么。
对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。
例如;输入、输出数据的类型、值的范围以及形式等。
同时为调试程序准备好测试数据,包含合法的输入数据和非法形式输入的数据。
2.1.2设计和编码设计即是对问题描述中涉及的操作对象定义相应的数据类型, 序模块定义主程和各抽象数据类型;定义相应的存储结构并写出各过程和函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试。
编码即把详细设计的结果进一步求精为程序设计语言程序,写出源程序。
对程序中的疑问应作出记号,以便上机时注意解决。
每个明确的功能模块程序一般不超过60行,程序的每一行不得超过60个字符,否则要进一步划分。
2.1.3上机前程序静态检查上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。
静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。
实验1 线性表顺序存储结构实现3.1实验目的和要求掌握线性表的结构性质及其链式存储结构各种操作的实现;3.2实验内容用C#编程实现线性表的链式存储结构及各种操作,尤其要实现任意位置元素的插入和删除操作。
3.3实验指导1、建立控制台应用程序,创建结点类Node<T>和链式顺序表类SepLinkedList<T>,结点类Node<T>包括两个字段成员_data和_next,分别表示该结点的结点元素和下一结点;包括两个属性成员Data和Next,分别完成对_data和_next读写;3个构造函数 Node()、Node(T data)、Node(Node<T> next),分别表示创建无参数的对象、参数为T类型数据的对象、参数为Node<T>类型结点的对象。
链式顺序表类SepLinkedList<T>包括1个私有字段成员_head-头指针;包括1个属性成员Head,完成对_head读写;包括一系列操作方法成员;2、在主入口函数中创建类的实例,对该实例完成各种操作,每次操作完结果进行输出。
3.4部分程序参考代码结点类Public class Node<T>{private T _data;public T Data{get { return _data; }set { _data = value; }}private Node<T> _next;public Node<T> Next{get { return _next; }set { _next = value; }}public Node(){_data = default(T);_next = null;}public Node(T data){_data = data;_next = null;}public Node(Node<T> next) {_next = next;}}单链表类Public class SepLinkedList<T>{private Node<T> _head;///头指针public Node<T> Head{get { return _head; }set { _head = value; }}///获取单链表长度public int GetLength(){Node<T> p = _head;int length = 0;while (p != null){length++;p = p.Next;}return length;}///清空单链表public void Clear(){_head = null;}判断链表是否为空public bool IsEmpty(){if (_head == null){return true;}else{return false;}}///链表末尾追加数据元素public void Append(T item){Node<T> p = new Node<T>();Node<T> q = new Node<T>(item);if (_head == null){_head = q;return;}p = _head;while (p.Next != null){p = p.Next;}p.Next = q;}///删除第i个数据元素public T Delete(int i){该部分代码自己实现}Node<T> p = _head;int j = 1;while (p.Next != null && j < i) {j++;q = p;p = p.Next;}if (j == i){q.Next = p.Next;return p.Data;}else{Console.WriteLine("该位置不存在结点");return default(T);}}///在第i个位置前插入数据元素public void Insert(T item, int i){该部分代码自己实现}///读取第i位置元素public T GetElem(int i){if (IsEmpty()){Console.WriteLine("链表为空");return default(T);}Node<T> p = new Node<T>();p = _head;int j = 1;while (p.Next != null && j < i){p = p.Next;j++;}if (j == i){return p.Data;}else{Console.WriteLine("未找到该序号的结点");return default(T);}///按值查找数据元素public int Locate(T item){if (IsEmpty()){Console.WriteLine("链表为空");return -1;}Node<T> p = new Node<T>();p = _head;int i = 1;while ( p != null && !item.Equals(p.Data)) {p = p.Next;i++;}if (p != null){return i;}else{Console.WriteLine("单链表中不存在指定数据元素");return -1;}}}2.2.3 单链表的建立:第一种方式:(采用从尾部加入结点的方式)///建立单链表static SepLinkedList<int> CreateLinkedList(){SepLinkedList<int> result = new SepLinkedList<int>(); Node<int> r = new Node<int>();r = result.Head;int elem = Int32.Parse(Console.ReadLine());while (elem != -1)//以-1做为结束标志{Node<int> p = new Node<int>(elem);if (result.Head == null){result.Head = p;}else{r.Next = p;//加入链表}r = p; //记下最后一个结点elem = Int32.Parse(Console.ReadLine());}if (r != null){r.Next = null;//最后一个节点地址域置空}return result;}第二种方式:(采用在头部加入结点的方式)static SepLinkedList<int> CreateSepLinkedList(){SepLinkedList<int> result = new SepLinkedList<int>();int d = Int32.Parse(Console.ReadLine());while (d != -1){Node<int> elem = new Node<int>(d);elem.Next = result.Head;result.Head = elem;d = Int32.Parse(Console.ReadLine());}return result;}。
计算机系第一部分数据结构课程实验概述一.实验目的《数据结构》是计算机专业的主干课程和必修课程之一,其目的是让大家学习、分析和研究数据对象特征,掌握数据组织方法和计算机的表示方法,以便选择合适的数据逻辑结构和存储结构,设计相应的运算操作,把现实世界中的问题转化为计算机内部的表示与处理的方法,要求掌握算法的时间、空间复杂度分析基本技术,培养良好的程序设计风格,掌握进行复杂程序设计的技能。
在计算机科学领域,尤其是在系统软件和应用软件的设计和应用中要用到各种数据结构,因此,掌握数据结构对提高软件设计和程序编制水平有很大的帮助。
二.实验要求2.1实验步骤设计步骤的规范不但可以培养学生科学的工作方法和作风,而且还能有效地减少错误,提高工作效率。
因此必须严格执行良好的实验步骤规范(包括上机操作规范)。
本课程实验的基本步骤是:2.1.1问题分析充分地分析和理解问题本身,明确问题要求做什么。
对问题的描述应避开算法和所涉及的数据类型,而是对所需完成的任务作出明确的回答。
例如;输入、输出数据的类型、值的范围以及形式等。
同时为调试程序准备好测试数据,包含合法的输入数据和非法形式输入的数据。
2.1.2设计和编码设计即是对问题描述中涉及的操作对象定义相应的数据类型,定义主程序模块和各抽象数据类型;定义相应的存储结构并写出各过程和函数的伪码算法。
在这个过程中,要综合考虑系统功能,使得系统结构清晰、合理、简单和易于调试。
编码即把详细设计的结果进一步求精为程序设计语言程序,写出源程序。
对程序中的疑问应作出记号,以便上机时注意解决。
每个明确的功能模块程序一般不超过60行,程序的每一行不得超过60个字符,否则要进一步划分。
2.1.3上机前程序静态检查上机前程序静态检查可有效提高调试效率,减少上机调试程序时的无谓错误。
静态检查主要有两种途径:用一组测试数据手工执行程序;通过阅读或给别人讲解自己的程序而深入全面地理解程序逻辑。
把程序中的明显错误事先排除。
数据结构上机实验编程指南为了更好地帮助同学们做好数据结构实验,在此给出数据结构上机编程的一般思路和程序的基本框架结构。
具体程序结构按先后顺序可分为以下3个部分:1.预定义常量及类型对于相关的常量与类型(如状态类型)进行定义,如:#define OK 1#define ERROR 0#define OVERFLOW –2#define TRUE 1#define FALSE 0typedef int Status;2.相关数据结构类型定义此部分包括对所使用的数据结构给出其类型定义及其基本操作函数定义。
(具体内容可参见实验一)3.主调程序的定义此部分给出相关的主调程序,在此程序中定义相关数据结构变量,并通过调用其操作函数,实现设计目的。
(具体内容可参见实验一)实验二链表一、实验目的1.掌握链表的类型定义;2.掌握链表及其基本操作的实现;3.掌握利用C编程语言实现数据结构的编程方法;4.掌握链表的复杂操作的实现算法;5.通过上机实践加强利用数据结构解决实际问题的能力。
二、实验要求1.实验前做好充分准备,事先预习好本次实验内容;2.实验时记录实验结果,按要求完成各题;3.实验结束后,给出实验总结与分析并及时给出本次实验的实验报告。
三、实验题目与要求1.实验题目一:单链表的类型定义及其相关操作算法的实现要求:编程实现单链表的类型定义及单链表的求长度操作、取元素值操作、创建操作、插入操作、删除操作等,并对其进行验证。
2.实验题目二:链表的应用要求:编程实现单链表的拆分、求单链表的倒数第k个结点以及用循环单链表求解约瑟夫环问题的算法。
3. 实验题目三:链表上的算法设计编程实现单链表的逆置操作算法4. 特别注意:在DEV C++编译环境中,不要建立C工程,因为在C语言中不支持引用传递方式,只需建立C++源程序文件即可!!!四、实验程序示例本指导书所给出的示例程序均为DEV C++环境下完成的,若使用其它C开发环境,则部分语句要进行少许修改。
《数据结构》实验指导(一)数据结构实验指导(一)1. 实验背景数据结构是计算机科学中的一个重要概念,它描述了如何组织和存储数据以及如何通过不同的操作来访问和修改这些数据。
在本实验中,我们将学习和实践数据结构中的线性表和链表。
2. 实验目的通过本次实验,我们将达到以下目的:- 理解线性表和链表的概念- 学会如何使用线性表和链表来解决常见的问题- 掌握线性表和链表的基本操作3. 实验内容3.1 线性表线性表是由 n 个数据元素 a1, a2, , an 组成的有序序列。
常见的线性表有数组和链表两种实现方式。
3.1.1 线性表的基本操作线性表的基本操作包括:- 初始化线性表- 判断线性表是否为空- 获取线性表的长度- 获取线性表中的元素- 在线性表的指定位置插入元素- 删除线性表中的指定元素- 清空线性表3.1.2 数组数组是一种连续的内存空间,可以存储相同类型的数据元素。
在数组中,每个元素的位置是通过下标来访问的,下标从 0 开始。
3.1.2.1 数组的插入操作数组的插入操作是将一个元素插入到数组的指定位置,同时需要将原位置的元素及其后续元素后移一位。
3.1.2.2 数组的删除操作数组的删除操作是将数组中指定位置的元素删除,同时需要将后续元素前移一位。
3.2 链表链表是一种离散的数据结构,它的元素包含两个部分:数据和指针。
每个节点都包含一个数据元素和一个指向下一个节点的指针。
3.2.1 链表的基本操作链表的基本操作包括:- 初始化链表- 判断链表是否为空- 获取链表的长度- 获取链表中的元素- 在链表的指定位置插入元素- 删除链表中的指定元素- 清空链表3.2.2 单链表单链表是最简单的链表形式,它的每个节点只包含一个指向下一个节点的指针。
3.2.2.1 单链表的插入操作单链表的插入操作是将一个元素插入到链表的指定位置,同时需要调整指针的指向。
3.2.2.2 单链表的删除操作单链表的删除操作是将链表中指定位置的节点删除,同时需要调整指针的指向。
《数据结构(C#)》实验指导书软件学院—、上机实验的指导思想和要求1.1 上机实验的目的上机实验的目的,绝不仅是为了验证教材和讲课的内容,或者验证自己所编的程序正确与否。
上机实验的目的是:(1)加深对讲授内容的理解,光靠课堂讲授,既枯燥无味又难以记住,但它们是很重要的,通过多次上机,就能自然地、熟练地掌握。
(2)熟悉所用的计算机系统的操作方法,也就是了解和熟悉C#程序开发的环境。
一个程序必须在一定的外部环境下才能运行,所谓“环境”,就是指所用的计算机系统的硬件和软件条件,或者说是工作平台。
使用者应该了解为了运行一个C#程序需要哪些必要的外部条件(例如硬件配置、软件配置),可以利用哪些系统的功能来帮助自己开发程序。
每一种计算机系统的功能和操作方法不完全相同,但只要熟练掌握一两种计算机系统的使用,再遇到其他系统时便会触类旁通,很快地学会。
(3)学会上机调试程序。
也就是善于发现程序中的错误,并且能很快地排除这些错误,使程序能正确运行。
经验丰富的人,在编译连接过程中出现“出错信息”时,一般能很快地判断出错误所在,并改正之。
而缺乏经验的人即使在明确的“出错提示”下也往往找不出错误而求助于别人。
要真正掌握计算机应用技术,就不仅应当了解和熟悉有关理论和方法,还要求自己动手实现。
对程序设计来说,则要求会编程序并上机调试通过。
因此调试程序不仅是得到正确程序的一种手段,而且它本身就是程序设计课程的一个重要的内容和基本要求,应给予充分的重视。
调试程序固然可以借鉴他人的现成经验,但更重要的是通过自己的直接实践来累积经验,而且有些经验是只能“会意”难以“言传”。
别人的经验不能代替自己的经验。
调试程序的能力是每个程序设计人员应当掌握的一项基本功。
因此,在做实验时千万不要在程序通过后就认为万事大吉、完成任务了,而应当在已通过的程序基础上作一些改动(例如修改一些参数、增加程序一些功能、改变某些语句等),再进行编译、连接和运行。
《数据结构》课程上机实验指导书
实验一
【实验名称】顺序表的基本算法
【实验目的】
创建一个顺序表,掌握线性表顺序存储的特点。
设计和验证顺序表的查找、插入、删除算法。
【实验要求】
(1)从键盘读入一组整数,按输入顺序形成顺序表。
并将创建好的顺序表元素依次打印在屏幕上。
(2)设计一个带选择菜单的主函数,菜单中具备任意选择删除、插入、查找数据元素的功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置或元素值,按指定方式删除;
当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;
当选择查找功能时,从键盘读入欲查找的元素值,返回其位置序号。
(4)每种操作结束后,都能在屏幕上打印出此时顺序表元素的遍历结果。
【实验步骤】
1、实验前先写好算法。
2、上机编写程序。
3、编译。
4、调试。
例程:书上参考算法2-1,2-4,2-5,2-6,2-8!带菜单的主函数参考书上2.5综合实例!
注意:顺序表的结构体!
typedef struct
datatype items[listsize];
int length;
}SpList;
实验二
【实验名称】单链表的基本算法
【实验目的】
创建一个单链表,掌握线性表链式存储的特点。
设计和验证链表的查找、插入、删除、求表长的算法。
【实验要求】
(1)从键盘读入一组整数,按输入顺序形成单链表。
并将创建好的单链表元素依次打印在屏幕上。
(注意:选择头插法或者尾插法!)
(2)设计一个带选择功能菜单的主函数,菜单中至少具备任意选择删除、插入、查找数据元素,和求单链表表长等几项功能。
(3)当选择删除功能时,从键盘读入欲删除的元素位置,按指定位置删除;当选择插入功能时,从键盘读入新元素值和被插入位置,在指定位置插入;当选择
查找功能时,从键盘读入欲查找的元素值,返回其位置序号;当选择求表长
功能时,返回该单链表表长的数值。
(4)每种操作结束后,都能在屏幕上打印出此时单链表元素的遍历结果。
【实验步骤】
1、实验前先写好算法。
2、上机编写程序。
3、编译。
4、调试。
例程:书上参考算法2-10,2-12,2-13,2-15,2-17!带菜单的主函数参考书上2.5综合实例!
另外,注意,指针的初始化!指针的操作必须谨慎!
链表的结构体如下:
typedef struct Node
Datatype ch;
struct Node *next;
}LNode, *Pnode, *Linklist;
实验三
【实验名称】回文判断的算法
【实验目的】
利用栈和队列的操作来实现对字符序列是否是一个回文序列的判断。
设计和验证入栈、出栈及入队、出队的算法。
【实验要求】
(1)从键盘读入一组字符序列,按输入顺序入队列到链式队列A中。
并将创建好的A队列中元素依次遍历,打印在屏幕上。
(2)将字符序列从A队列出队列,压入到一个顺序栈B中。
(3)再将字符序列从顺序栈B中出栈,所有元素依次遍历,打印在屏幕上。
(4)将A,B的元素值逐一比较,判断是否一致。
若一致则是回文,并将判定结果打印到屏幕上。
注意:指定采用顺序栈和链队列的结构来实现。
【实验步骤】
1、设计算法
2、编写程序
3、编译
4、调试
例程:栈的各种操作如算法3-3,3-4,队列的操作比如算法3-15,3-16等等。
可能用到的字符串函数,比如strlen(),strcmp()等。
顺序栈:
typedef struct{
char items[stacksize];
int top;
}SqStack;
链队列:
typedef struct QNode{
char data;
struct QNode *next;
}LQNode , *PQNode;
typedef struct{
PQNode front ,rear;
}LinkQueue;
实验四
【实验名称】哈希查找
【实验目的】
验证哈希查找算法
【实验要求】
(1)先创建一个数组类型的顺序表,以—1作为结束。
从键盘输入一组数据元素后,按顺序表的遍历输出,并打印显示。
(2)再以哈希函数方式,将数据元素放入哈希表中,并将哈希表输出,并打印显示。
采用线性探测法处理冲突。
注意:哈希表的下标和数据内容都显示到屏幕上。
(3)输入需要查找的任意元素的关键字,查找并输出该元素的位置下标序列号。
若有冲突,显示它原来的下标位置和新的下标位置。
若没有,也将找不到的信息
反馈出来。
注意:用线性探测法处理冲突。
【实验步骤】
1、设计算法
2、编写程序
3、编译
4、调试
例程:
参考书上的算法P274-277的多个算法。
比如:哈希表的地址区间为0-17,哈希函数为h(key)=K%17。
采用线性探测法处理冲突。
若给定关键字序列:26,25,72,38,8,18,59。
请问搜索59在几号下标位置,需要查找多少次?
实验五
【实验名称】排序操作
【实验目的】
验证各种排序算法。
在调试中体会排序过程。
【实验要求】
(1)从键盘读入一组无序数据,按输入顺序先创建一个线性表。
(2)用带菜单的主函数任意选择一种排序算法将该表进行递增排序。
【实验步骤】
1、设计算法
2、编写程序
3、编译
4、调试
例程:冒泡排序法、直接选择排序法、直接插入排序
实验六(综合)
【实验名称】学生成绩表的操作
【实验目的】
加强线性表操作的训练。
【实验要求】
(1)先创建一个数组类型或链表类型的线性表,其中每个数据元素包括的数据项内容有:学生学号,姓名,及语文,数学,英语三门课程的分数。
(2)利用键盘输入数字在主函数中选择菜单的功能,可以对学生成绩表进行多项操作,比如:增加一个学生的信息,删除一个学生的信息,查找一个学生的信息,
或者按某门课程分数进行学生的排序等等。
(3)每个操作完成后,在屏幕上将该线性表的数值完全输出。
【实验步骤】
5、设计算法
6、编写程序
7、编译
8、调试
例程:线性表的各种操作
数据结构课程实验报告要求
实验题目
班级姓名学号日期一、需求分析
1.程序的功能;
2.输入输出的要求;
3.测试数据。
二、概要设计
1.本程序所用的抽象数据类型的定义;
2.主程序的流程及各程序模块之间的层次关系。
三、详细设计
1.采用c语言定义相关的数据类型;
2.写出各模块的伪码算法;
3.画出函数的调用关系图。
四、调试分析
1.调试中遇到的问题及对问题的解决方法;
2.算法的时间复杂度和空间复杂度。
五、源程序(带注释)
六、使用说明及测试结果。