实验指导-数据结构B教案资料

合集下载

数据结构实验指导书

数据结构实验指导书

数据结构实验指导书一、实验目的数据结构是计算机科学中的重要基础课程,通过实验,旨在帮助学生更好地理解和掌握数据结构的基本概念、原理和算法,提高学生的编程能力和问题解决能力。

具体而言,实验的目的包括:1、加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解,掌握其特点和操作方法。

2、培养学生运用数据结构解决实际问题的能力,提高算法设计和程序实现的能力。

3、增强学生的逻辑思维能力和调试程序的能力,培养学生的创新意识和团队合作精神。

二、实验环境1、操作系统:Windows 或 Linux 操作系统。

2、编程语言:C、C++、Java 等编程语言中的一种。

3、开发工具:如 Visual Studio、Eclipse、Code::Blocks 等集成开发环境(IDE)。

三、实验要求1、实验前,学生应认真预习实验内容,熟悉相关的数据结构和算法,编写好实验程序的代码框架。

2、实验过程中,学生应独立思考,认真调试程序,及时记录实验过程中出现的问题及解决方法。

3、实验完成后,学生应撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、问题分析与解决等。

四、实验内容(一)线性表1、顺序表的实现与操作实现顺序表的创建、插入、删除、查找等基本操作。

分析顺序表在不同操作下的时间复杂度。

2、链表的实现与操作实现单链表、双向链表的创建、插入、删除、查找等基本操作。

比较单链表和双向链表在操作上的优缺点。

(二)栈和队列1、栈的实现与应用实现顺序栈和链式栈。

利用栈解决表达式求值、括号匹配等问题。

2、队列的实现与应用实现顺序队列和链式队列。

利用队列解决排队问题、广度优先搜索等问题。

(三)树1、二叉树的实现与遍历实现二叉树的创建、插入、删除操作。

实现二叉树的前序、中序、后序遍历算法,并分析其时间复杂度。

2、二叉搜索树的实现与操作实现二叉搜索树的创建、插入、删除、查找操作。

分析二叉搜索树的性能。

(四)图1、图的存储结构实现邻接矩阵和邻接表两种图的存储结构。

《数据结构》实验指导书

《数据结构》实验指导书

数据结构实验课程大纲本大纲是针对计算机科学与技术专业本科对数据结构的基本要求而编写的。

一、目的与任务数据结构是一门实践性很强的课程,每个学生必须完成一定数量的上机作业。

通过上机作业,要求在数据结构的逻辑特性和存贮表示、基本数据结构的选择和应用、算法设计及其实现等方面加深对课程基本内容的理解。

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

提高分析问题和用计算机解决实际问题的能力。

为后续课程的学习以及为应用软件特别是非数值软件的开发打下良好的理论基础和实践基础。

二、课程内容1.顺序表的表示和运算(0-2学时)2.链表的表示和运算(2学时)3.栈的应用(2-3学时)4.队列的应用(2-3学时)5.二叉树的基本操作和应用(2-6学时)6.图及其应用(2-6学时)7.排序(4-6学时)8.查找(2-4学时)三、基本要求1.逐步理解和掌握程序设计和上机操作的基本方法和技能。

2.理解并实现各种基本数据结构的存贮表示、运算方法及其典型应用;学会根据实际问题的要求设计算法的数据结构,并具有一定的比较和选用数据结构及算法的能力。

3.理解并实现常用的查找和排序的基本方法。

四、学时分配五、实验内容注:带*的内容以及练习与思考题,可根据实际学时、专业方向特点等具体要求,做相应调整或从略。

实验一、顺序表实验目的:熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作。

实验要求:了解并熟悉顺序表的逻辑特性、存储表示方法和顺序表的基本操作的实现和应用。

实验内容:编写程序实现下列的要求:(1) 设数据元素为整数,实现这样的线性表的顺序存储表示。

(2) 键盘输入10个数据元素,利用顺序表的基本操作,建立该表。

(3) 利用顺序表的基本操作,找出表中的最大的和最小的数据元素(用于比较的数据元素为整数)。

(4) * 若数据元素为学生成绩(含姓名、成绩等字段),重新编程,实现上面的要求。

要求尽可能少地修改前面的程序来得到新程序。

太原理工大学 软件学院《数据结构B》--实验指导书-杨永强

太原理工大学 软件学院《数据结构B》--实验指导书-杨永强

《数据结构B》实验指导书计算机科学与技术学院计算机科学与技术系2011年09月目录实验一线性表 (1)实验二树 (5)实验三图 (7)实验四查找 (11)实验五内排序 (13)实验一线性表【目的与要求】本次实习的主要目的是为了使学生熟练掌握线性表的基本操作在顺序存储结构和链式存储结构上的实现,提高分析和解决问题的能力。

要求仔细阅读并理解下列例题,上机调试并编译执行通过,并观察其结果,然后独立完成后面的实验内容,写出完整的实验报告。

编写程序过程中注意养成良好的编程风格与习惯,要求程序结构清晰,程序缩进,适当注释。

【参考例题】[问题描述]用链表形式存储一个字符串,插入、删除某个字符,最后按正序、逆序两种方式输出字符串。

[输入]初始字符串,插入位置,插入字符,删除字符。

[输出]已建立链表(字符串),插入字符后链表,删除字符后链表,逆转后链表。

[存储结构]采用链式存储结构[算法的基本思想]建立链表:当读入字符不是结束符时,给结点分配存储空间,写数据域,将新结点插到表尾;插入字符:根据读入的字符在链表中找插入位置,将新结点插入到该位置之前;删除字符:根据读入的删除字符在链表中找到被删结点后,将其从链表中删除;链表逆转:从链表的第一个结点开始对所有结点处理,将每个结点的前驱变为它的后继;打印链表:从链表的第一个结点开始,依次打印各个结点的数据域。

[参考源程序]#define NULL 0typedef struct node{char a;struct node *link;}node,*nodelink;void readlink(nodelink head){nodelink p,q;char c;p=head;printf("Input a linktable(a string):");scanf("%c",&c);if (c=='\n') printf("This string is empty。

数据结构课程实验指导书

数据结构课程实验指导书

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

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

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

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

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

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

二、实验前的准备工作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.单击“保存”按钮保存源程序。

2010数据结构实验指导书

2010数据结构实验指导书

《数据结构B》实验指导书目录实验说明及要求 0实验一线性表..................................................................................... 错误!未定义书签。

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

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

实验四树.. (7)实验五散列表..................................................................................... 错误!未定义书签。

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

实验七查找 ........................................................................................ 错误!未定义书签。

实验八图. (20)综合设计考核 (23)附录1 在V isual 2003中建立、编译和运行程序 (24)附录2 使用教材提供的参考文件的方法 (29)附录3 如何设置编译器生成C代码 (32)参考文献 (33)实验说明及要求一实验说明《数据结构B》实验是为了辅助《数据结构B》(双语教学)而开展的。

因为理论教学采用了两种教材(《数据结构与算法分析》的C++版和C语言描述版),所以在实验时程序的编写既允许采用C语言,又允许采用C++语言。

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

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

数据结构实验指导书数据结构实验指导书目录数据结构实验指导书 (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.数据结构设计针对要解决的问题,考虑各种可能的数据结构,并且力求从中选出最佳方案(必须连同算法实现一起考虑),确定主要的数据结构和全程变量。

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

《数据结构》实验指导书

《数据结构》实验指导书
ElemType e;//非零元素的值
} Triple;
typedef struct
{Triple data[MAXSIZE+1];
//非零元素的三元组表,data[0]未用
int mu,nu,tu;//矩阵的行数、列数和非零元素个数
typedef struct list
{ElemType elem[MAXSIZE];//静态线性表
int length; //顺序表的实际长度
} SqList;//顺序表的类型名
五、注意问题
1.插入、删除时元素的移动原因、方向及先后顺序。
4.编写函数,借助队列实现二叉树的层次遍历算法。
5.编写函数,求二叉树的高度。
6.编写函数,求二叉树的结点个数。
7.编写函数,求二叉树的叶子个数。
8.编写函数,交换二叉树每个结点的左子树和右子树。
9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
六、实验报告
根据实验情况和结果撰写并递交实验报告。
实验三 栈和队列
一、预备知识
1.栈的顺序存储和链式存储结构的类型定义方法及其基本操作算法
2.队列的顺序存储和链式存储结构的类型定义方法及其基本操作算法
二、实验目的
1.掌握栈、队列的思想及其存储实现
2.掌握栈、队列的常见算法的程序实现
8.编写函数,实现输入一个元素x,把它插入到有序表中,使顺序表依然有序。
9.编写一个主函数,在主函数中设计一个简单的菜单,分别调试上述算法。
四、实验说明
1.顺序表的存储定义
#define MAXSIZE 100 //顺序表的最大元素个数
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验指导-数据结构B附录综合实验1、实验目的本课程的目标之一是使得学生学会如何从问题出发,分析数据,构造求解问题的数据结构和算法,培养学生进行较复杂程序设计的能力。

本课程实践性较强,为实现课程目标,要求学生完成一定数量的上机实验。

从而一方面使得学生加深对课内所学的各种数据的逻辑结构、存储表示和运算的方法等基本内容的理解,学习如何运用所学的数据结构和算法知识解决应用问题的方法;另一方面,在程序设计方法、C语言编程环境以及程序的调试和测试等方面得到必要的训练。

2、实验基本要求:1)学习使用自顶向下的分析方法,分析问题空间中存在哪些模块,明确这些模块之间的关系。

2)使用结构化的系统设计方法,将系统中存在的各个模块合理组织成层次结构,并明确定义各个结构体。

确定模块的主要数据结构和接口。

3)熟练使用C语言环境来实现或重用模块,从而实现系统的层次结构。

模块的实现包括结构体的定义和函数的实现。

4)学会利用数据结构所学知识设计结构清晰的算法和程序,并会分析所设计的算法的时间和空间复杂度。

5)所有的算法和实现均使用C语言进行描述,实验结束写出实验报告。

3、实验项目与内容:1、线性表的基本运算及多项式的算术运算内容:实现顺序表和单链表的基本运算,多项式的加法和乘法算术运算。

要求:能够正确演示线性表的查找、插入、删除运算。

实现多项式的加法和乘法运算操作。

2、二叉树的基本操作及哈夫曼编码译码系统的实现内容:创建一棵二叉树,实现先序、中序和后序遍历一棵二叉树,计算二叉树结点个数等操作。

哈夫曼编码/译码系统。

要求:能成功演示二叉树的有关运算,实现哈夫曼编码/译码的功能,运算完毕后能成功释放二叉树所有结点占用的系统内存。

3、图的基本运算及智能交通中的最佳路径选择问题内容:在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算法,实现图的深度和宽度优先遍历算法,解决智能交通中的路径选择问题。

设有n 个地点,编号为0~n-1,m条路径的起点、终点和代价由用户输入提供,寻找最佳路径方案(例如花费时间最少、路径长度最短、交通费用最小等,任选其一即可)。

要求:设计主函数,测试上述运算。

4、各种内排序算法的实现及性能比较内容:验证教材的各种内排序算法。

分析各种排序算法的时间复杂度。

要求:使用随机数产生器产生较大规模数据集合,运行上述各种排序算法,使用系统时钟测量各算法所需的实际时间,并进行比较。

4、实验报告范例:实验╳╳╳╳╳╳班级____________姓名____________学号____________日期____________1. 实验目的:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(扼要而准确地描述所求解的实验项目的目的。

)2. 实验任务:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(明确实验项目的任务和演示程序的主要功能。

)3. 实验内容:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(使用模块和流程图表示系统分析和设计的结果,描述各模块之间的层次结构,给出函数之间的调用关系和数据传递方式,给出核心算法的C源代码,并加上详细注释,分析主要算法的时间复杂度,必要时分析空间复杂度,给出算法分析的计算过程。

)4. 实验过程描述:╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳╳(列出实验所用的测试用例和相应的程序运行结果(需要程序运行结果的屏幕截图),总结本次实验,包括对测试结果的分析,测试和调试过程遇到问题的回顾和分析,软件设计与实现的经验和体会,进一步改进的设想。

)实验1 线性表及多项式的运算一、实验目的1、掌握线性表的两种基本存储结构及其应用场合:顺序存储和链接存储。

2、掌握顺序表和链表的各种基本操作算法。

3、理解线性表应用于多项式的实现算法。

二、实验内容1、参照程序2.1~2.7,编写程序,完成顺序表的初始化、查找、插入、删除、输出、撤销等操作。

2、已知带表头结点单链表的类型定义如下:typedef struct node{ElemType element; //结点的数据域struct node *link; //结点的指针域}node;typedef struct{struct node * head;int n;}headerList;参照程序2.8~2.14,编写程序,完成带表头结点单链表的初始化、查找、插入、删除、输出、撤销等操作。

3、以题2所示带表头结点单链表为存储结构,编写程序实现单链表的逆置操作。

(原单链表为(a0,a1,……,a n-1),逆置后为(a n-1,a n-2,……,a0),要求不引入新的存储空间)。

4、以题2所示带表头结点单链表为存储结构,编写程序实现将单链表排序成为有序单链表的操作。

5、已知带表头结点一元多项式的类型定义如下:typedef struct pNode{int coef;int exp;struct pNode* link;} pNode;typedef struct{struct pNode *head;} polynominal;编写程序实现一元多项式的创建、输出、撤销以及两个一元多项式相加和相乘的操作。

实验2 二叉树的基本操作及哈夫曼编码译码系统的实现一、实验目的1、掌握二叉树的二叉链表存储表示及遍历操作实现方法。

2、实现二叉树遍历运算的应用:求二叉树中叶子结点个数、结点总数、二叉树的高度、交换二叉树的左右子树等。

3、掌握二叉树的应用—哈夫曼编码的实现。

二、实验内容1、已知二叉树二叉链表结点结构定义如下:typedef struct BinaryTreeNode{T Data;struct BinaryTreeNode * LChild,* RChild;} BinaryTreeNode,* BinTree;参照程序5.1~5.4,编写程序,完成二叉树的先序创建、先序遍历、中序遍历、后序遍历等操作。

2、以题1所示二叉链表为存储结构,编写程序实现求二叉树结点个数、叶子结点个数、二叉树的高度以及交换二叉树所有左右子树的操作。

3、已知哈夫曼树结点结构定义如下:typedef{ElementType Data; //结点的数据域int w; //结点的权值int parent, lchild, rchild; //结点的双亲、左孩子、右孩子}HFMTNode;编写程序,实现哈夫曼树的创建、哈夫曼编码以及解码的实现。

实验3 图的基本运算及飞机换乘次数最少问题一、实验目的1、掌握图的邻接矩阵和邻接表的存储实现方法。

2、实现图的深度优先和宽度优先遍历运算。

3、学习使用图算法解决应用问题的方法。

二、实验内容1、已知图的邻接矩阵结构定义如下:typedef int ElemType;typedef struct{ElemType **a; //邻接矩阵int n; //图的当前顶点数int e; //图的当前边数ElemType noEdge; //两顶点间无边时的值} mGraph;参照程序9.1~9.5,编写程序,完成邻接矩阵的初始化、撤销、边的搜索、插入、删除等操作。

2、以题1所示邻接矩阵为存储结构,编写程序,实现图的深度、宽度优先遍历。

3、已知图的邻接表结构定义如下:typedef struct eNode{int adjVex; //任意顶点u相邻接的顶点ElemType w; //边的权值struct eNode* nextArc; //指向下一个边结点}eNode;typedef struct{int n; //图的当前顶点数int e; //图的当前边数eNode **a; //指向一维指针数组}lGraph;参照程序9.6~9.10,编写程序,完成邻接表的初始化、撤销、边的搜索、插入、删除等操作。

4、以题3所示邻接表为存储结构,编写程序,实现图的深度、宽度优先遍历。

5、编写程序,实现飞机最少换乘次数问题:设有n个城市,编号为0~n-1,m条航线的起点和终点由用户输入提供。

一条换乘次数最少的线路方案。

(提示:可以使用有向图表示城市间的航线;只要两个城市间有航班,则图中这两点间存在一条权为1的边;可以使用Dijkstra算法实现)精品文档实验4 各种内排序算法的实现及性能比较一、实验目的1、掌握各种内排序算法的实现方法。

2、学会分析各种内排序算法的时间复杂度。

二、实验内容1、已知待排序序列以顺序表结构实现,数据元素以及表结构定义如下:typedef struct entry //数据元素{KeyType key; //排序关键字,KeyType应该为可比较类型DataType data; //data包含数据元素中的其他数据项};typedef struct list{ //顺序表int n; //待排序数据元素数量Entry D[MaxSize]; //静态数组存储数据元素}List;参照程序10.1~10.7,编写算法,分别实现顺序表的简单选择排序、直接插入排序、冒泡排序、快速排序、两路合并排序以及堆排序。

2、编写算法,利用随机函数,在文件中随机产生n个关键字。

(关键字定义为整型数据)3、编写程序,分别验证在简单选择排序、直接插入排序、冒泡排序、快速排序、两路合并排序以及堆排序,在待排序关键字个数为500、10000、50000、100000时,完成排序所需要的时间。

(单位为:毫秒)4、将排序结果存放于excel工作表中,并以图表(簇状柱形图)的方式显示。

收集于网络,如有侵权请联系管理员删除。

相关文档
最新文档