数据结构实验教学计划48学时0907.docx
《数据结构实验教学计划48学时0907.docx》由会员分享,可在线阅读,更多相关《数据结构实验教学计划48学时0907.docx(11页珍藏版)》请在冰豆网上搜索。
数据结构实验教学计划48学时0907
数据结构
实验教学计划
(48学时)
计算机软件技术教学研究中心
联合制定
计算机专业实验教学研究中心
前言
数据结构是计算机程序设计的重要理论基础,它不仅是计算机学科的核心课程,而且已成为其他理工专业的热门选修课。
数据结构是计算机科学中一门综合性的专业基础课,是介于数学、计算机硬件和计算机软件三者之间的一门核心课程。
该课程主要介绍如何合理地组织数据、有效地存储和处理数据,正确地设计算法以及对算法进行分析和评价。
该课程不仅是一般程序设计的基础,而且是设计和实现编译原理、操作系统、数据库系统及其他系统程序和大型应用程序的重要基础。
因此,数据结构课程一直是计算机科学与技术专业的一门理论性和实践性并重的核心课程。
课程的目标是使学生掌握数据的基本的逻辑结构和存储结构、一些典型的数据结构算法及程序设计方法和技巧,要求学会分析数据对象特征,掌握数据组织方法和计算机的表示方法,为数据选择适当的逻辑结构、存储结构以及相应的处理算法,要求具备算法分析的基本技术和能力,并培养良好的程序设计风格,掌握开发复杂、高效程序的技能。
因此,本实验教学计划是针对本科重点班学生学习数据结构实验而设计。
实验指导教师可根据本实验教学计划,针对学生实际情况制定具体的实验指导文档。
目录
实验一:
线性表的存储及基本操作、综合应用-1-
实验二:
二叉树的定义及基本操作、赫夫曼编码及应用-2-
实验三:
图存储及基本操作、典型应用-4-
实验四:
查找与排序算法综合应用-5-
补充实验一:
C程序设计基础及应用-6-
补充实验二:
栈和队列的存储及基本操作、综合应用-7-
补充实验三:
查找算法的实现及比较-8-
补充实验四:
排序算法的实现及比较-8-
详细实验教学计划
实验一:
线性表的存储及基本操作、综合应用(必作实验)
1、实验学时:
12学时(堂下8学时,堂上4学时)
2、实验目的:
1)掌握线性表的逻辑特征。
2)掌握线性表顺序存储结构的特点,熟练掌握顺序表的基本运算。
3)熟练掌握线性表的链式存储结构定义及基本操作。
4)理解循环链表和双链表的特点和基本运算。
5)加深对顺序存储数据结构的理解和链式存储数据结构的理解,逐步培养解决实际问题的编程能力。
6)掌握顺序表和链表的概念,学会对问题进行分析,选择恰当的逻辑结构和物理结构
3、实验内容:
1)利用顺序表,设计一组输入数据(假定为一组整数),能够对顺序表进行如下操作(要求每个操作采用菜单形式提供用户选择):
●创建一个新的顺序表,实现动态空间分配的初始化;
●根据顺序表结点的位置插入一个新结点(位置插入),形成有序顺序表;
●根据顺序表结点给定的值删除对应的第一个结点,或者删除指定值的所有结点(值删除);
●利用最少的空间实现顺序表元素的逆转;
●实现顺序表的各个元素的输出;
●彻底销毁顺序线性表,回收所分配的空间;
●对顺序线性表的所有元素删除,置为空表;
●返回其数据元素个数;
●按位置查找,根据顺序表的特点,可以随机存取,直接可以定位于第i个结点,查找该元素的值,对查找结果进行返回;
●按值查找,根据给定数据元素的值,只能顺序比较,查找该元素的位置,对查找结果进行返回;
●判断顺序表中是否有元素存在,对判断结果进行返回;
●编写主程序,实现对各不同的算法调用。
2)利用线性表的链式存储结构,设计一组输入数据(假定为一组整数),能够对单链表进行如下操作(要求每个操作采用菜单形式提供用户选择):
●初始化一个带表头结点的空链表;
●创建一个单链表是从无到有地建立起一个链表,即一个一个地输入各结点数据,并建立起前后相互链接的关系。
又分为逆位序(插在表头)输入n个元素的值和正位序(插在表尾)输入n个元素的值;
●插入结点可以根据给定位置进行插入(位置插入),也可以根据结点的值插入到已知的链表中(值插入),且保持结点的数据按原来的递增次序排列,形成有序链表。
●删除结点可以根据给定位置进行删除(位置删除),也可以把链表中查找结点的值为搜索对象的结点全部删除(值删除);
●输出单链表的内容是将链表中各结点的数据依次显示,直到链表尾结点;
●编写主程序,实现对各不同的算法调用。
3)实现一元稀疏多项式的表示及基本操作(建立、销毁、输出、加法、减法、乘法等操作);
4)把上述三个系统集成在一起,形成一个线性表基本操作和典型应用的管理系统,要求体现结构程序设计的思想。
实验二:
二叉树的定义及基本操作、赫夫曼编码及应用(必作实验)
1、实验学时:
12学时(堂下8学时,堂上4学时)
2、实验目的:
1)熟练掌握二叉树的二叉链表存储结构
2)掌握二叉树的非线性和递归性特点
3)熟练掌握二叉树的递归遍历操作的实现方法,掌握二叉树的非递归遍历操作的实现
4)掌握线索二叉树的定义和基本操作
5)加深对二叉树和性质的理解,逐步培养解决实际问题的编程能力
6)掌握赫夫曼树的概念、存储结构
7)掌握建立赫夫曼树和赫夫曼编码的方法及带权路径长度的计算
8)熟练掌握二叉树的应用
3、实验内容:
1)利用二叉树的链式存储结构,设计一组输入数据(假定为一组整数或一组字符),能够对二叉树进行如下操作:
●创建一棵空二叉树;
●对一棵存在的二叉树进行销毁;
●根据输入某种遍历次序输入二叉树中结点的值,依序建立二叉树;
●判断某棵二叉树是否为空;
●求二叉树的深度;
●求二叉树的根结点,若为空二叉树,则返回一特殊值;
●二叉树的遍历,即按某种方式访问二叉树中的所有结点,并使每个结点恰好被访问一次;
●编写主程序,实现对各不同的算法调用;
2)利用二叉树的链式存储结构,设计一组输入数据(假定为一组整数或一组字符),能够对二叉树进行如下操作:
●求某一个结点的双亲结点,求某一个结点的左孩子(或右孩子)结点;求某一个结点的左兄弟(或右兄弟)算法;
●利用栈,实现二叉树的非递归(先序、中序或后序)遍历算法;
●利用队列,实现层序递归遍历二叉树;
●定义线索二叉树的链式存储结构,建立线索二叉树,实现线索二叉树的插入和删除操作;
●编写主程序,实现对各不同的算法调用;
3)设计一种编码方案,要求对一个英文文本文件进行压缩编码,然后对该文件再进行译制码操作,对比原文件和编码文件进行压缩率的分析。
要求是:
●对于给定的英文文本,可以根据其频度进行哈夫曼编码,并能输出对应的哈夫曼树和哈夫曼编码;
●实现哈夫曼解码。
●能够分析文件,统计文件中出现的字符,统计字符出现的概率,再对文件进行编码,实现文件的压缩和解压缩。
●能够对于文件的压缩比例进行统计。
实验三:
图存储及基本操作、典型应用(必作实验)
1、实验学时:
12学时(堂下8学时,堂上4学时)
2、实验目的:
1)熟练掌握图的两种存储结构(邻接矩阵和邻接表)的表示方法
2)掌握图的基本运算及应用
3)加深对图的理解,逐步培养解决实际问题的编程能力
4)掌握图的邻接矩阵、邻接表的表示方法
5)掌握迪杰斯特拉和弗洛伊德的最短路径算法
6)理解拓扑排序,掌握关键路径的算法
7)加深对图的理解,逐步培养解决实际问题的编程能力
3、实验内容:
1)利用邻接表存储结构,设计一种图(有向或无向),并能够对其进行如下操作:
●创建一个可以随机确定结点数和弧(有向或无向)数的图;
●根据图结点的序号,得到该结点的值;
●根据图结点的位置求第一个邻接顶点的序号,以及下一个邻接顶点的序号;
●实现从第v个顶点出发对图进行深度优先递归遍历;
●实现对图作深度优先遍历;
●实现对图进行广度优先非递归遍历;
●编写主程序,实现对各不同的算法调用。
2)建立一个网,完成以下操作:
●选择一种网的存储结构,初始化网;
●用迪杰斯特拉算法或弗洛伊德算法实现点与点之间的最短路径
●建立一个AOE-网,实现关键路径算法。
3)集成上述两个系统,形成一个图基本操作和典型应用的管理系统。
实验四:
查找与排序算法综合应用(必作实验)
1、实验学时:
12学时(堂下8学时,堂上4学时)
2、实验目的
1)巩固和加深对各种数据结构的理解。
2)掌握恰当选用数据结构并设计与实际问题相符的算法的能力。
3、实验内容
1)建立学籍管理系统,实现对于学生信息的添加和维护管理,要求必须设置必要的循环选择菜单。
基本要求:
完成学籍登记表中的下面功能(登记表中包括学号、姓名、性别、出生日期、政治面貌、联系方式、家庭住址等信息)。
●数据来源为外部文件,查询结果和排序结果均可形成独立的文件存储。
●要求学生信息采用顺序表来实现,学生成绩信息采用二叉排序树来进行构建。
●插入:
将某学生的基本信息插入到登记表中;
●删除:
将满足条件的基本信息删除;
●修改:
对基本信息的数据项进行修改;
●查询:
查找满足条件的学生;实现按学号查询、姓名查询、按科目成绩查询等功能。
实现查找某学生的选课记录,课程成绩等;
●排序:
实现按照单科成绩和总成绩排序功能,同时实现按照学号、姓名等进行的排序功能。
至少采用三种不同的排序算法来实现该项功能。
●输出:
将登记表中的全部(或满足条件)基本信息输出。
●可以添加课程信息(如开课学期、上课时间、上课地点等信息),学生选课信息,实现学生的选课功能;
●利用二叉排序树、平衡树、排序算法等数据结构知识提高排序和查找速度。
2)对上述学籍管理系统的设计与实现问题,分析其数据及数据间的联系,为其设计适当的数据结构,并分析这种结构的优点。
3)对上述问题设计切实可行的算法,并分析该算法的时间和空间复杂度。
补充实验一:
C程序设计基础及应用(选作实验)
1、实验学时:
6学时(学生堂下根据自身情况选作)
2、实验目的:
1)巩固复习前期所学C语言的基本数据类型和自定义数据类型等知识点,强化学习数据结构语言和编程基础。
2)巩固复习前期所学C语言的函数参数传递、指针和结构体等知识点,加强学习数据结构语言基础。
3)理解递归调用的实现过程,学会递归程序的设计方法
3、实验内容:
1)对一个完整的C小程序进行调试,运行,从中理解数据和算法的概念。
2)学生信息的显示,具体要求如下:
●定义一个结构体描述学生信息(学号,姓名,性别,年龄,住址);
●设计一个函数,用于显示单个学生信息,函数的参数为前面定义的结构体类型;
●设计一个主函数,在主函数中输入学生的信息,并调用前面定义的函数进行显示(学生人数不少于5人)。
3) 输入若干个整数作为数组元素值,然后按输入时顺序的就地逆置排序,最后打印出逆置后的元素值。
要求用指针和动态内存分配方法实现。
例如 输入:
10 2 30 4 5,逆置后显示为:
5 4 30 2 10。
4)编写折半查找的递归程序。
并在VC++的调试环境下观察折半查找递归程序的调用与返回过程,并记录其过程和返回值。
设计一个折半查找的循环结构的算法,并与递归算法进行对比分析。
补充实验二:
栈和队列的存储及基本操作、综合应用(选作实验)
1、实验学时:
6学时(学生堂下根据自身情况选作)
2、实验目的:
1)熟练掌握栈和队列的特点
2)掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用
3)掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用,掌握环形队列的入队和出队等基本操作
4)掌握递归和非递归算法的实现技术和实际应用
5)加深对栈和队列的理解,逐步培养解决实际问题的编程能力
3、实验内容:
1)利用栈的顺序存储结构,设计一组输入数据(假定为一组整数),能够对顺序栈进行如下操作:
●初始化一个空栈,分配一段连续的存储空间,且设定好栈顶和栈底;
●完成一个元素的入栈操作,修改栈顶指针;
●完成一个元素的出栈操作,修改栈顶指针;
●读取栈顶指针所指向的元素的值;
●用顺序栈来模拟将十进制数N和其它d进制数的转换过程。
以此来实现十进制数与任意进制数的转换;
●编写主程序,实现对各不同的算法调用。
2)利用队列的链式存储结构,设计一组输入数据(假定为一组整数),能够对链式队列进行如下操作:
●初始化一个空队列,形成一个带表头结点的空队;
●完成一个元素的入队操作,修改队尾指针;
●完成一个元素的出队操作,修改队头指针;
●修改主程序,实现对各不同的算法调用。
3)利用栈和队列模拟停车场管理。
补充实验三:
查找算法的实现及比较(选作实验)
1、实验学时:
6学时(学生堂下根据自身情况选作)
2、实验目的:
1)掌握线性结构(顺序查找、折半查找)上查找的基本思想和算法实现,了解怎样对各种查找方法进行时间性能(平均查找长度)分析。
2)掌握树形结构(二叉排序树)实现查找的基本思想和算法实现,了解怎样对各种查找方法进行时间性能(平均查找长度)分析。
3、实验内容:
假设每位学生必须完成基础课50学分、专业课50学分、选修课24学分、人文类课程8学分、实验性课程20学分才能够毕业。
因此在管理学分时,要考虑每个学分所属于的课程类别。
该程序应分别基于有序表和二叉排序树完成下列基本功能:
●通过键盘输入某位学生的学分;
●给定学号,显示某位学生的学分完成情况;
●给定某个班级的班号,显示该班所有学生学分完成情况;
●给定某位学生的学号,修改该学生的学分信息;
●按照某类课程的学分高低进行排序;
●提供一些统计各类信息的功能。
补充实验四:
排序算法的实现及比较(选作实验)
1、实验学时:
6学时(学生堂下根据自身情况选作)
2、实验目的:
1)理解各类排序算法的基本思想、排序过程、实现过程;
2)理解不同排序算法的时间复杂度及适用环境;
3)了解算法性能测试的基本方法。
3、实验内容:
1)实现直接插入排序、冒泡、直接选择、快速排序、堆排序、归并排序算法。
●数据的存储使用数组,数据个数和数据由键盘输入
●设计并实现一个用户选择菜单。
2)设计并实现一个利用随机数来测试各类排序算法的程序。
从所学的排序算法中任选四种排序算法进行测试,记录运行时间,并分析各类排序算法的时间复杂度;
3)把实验六中的排序功能独立成一个子菜单,调用本实验实现的算法来实现学生学分管理的各类排序统计功能。