zzu-数据结构-实验大纲
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》实验教学大纲
课程编号: 242008
课程名称:数据结构
英文名称:Data Structures
课程类型: 平台(学科基础平台)
学时:32
学分:1
适用对象:软件工程、计算机科学与技术
先修课程:离散数学、C语言程序设计
后续课程:操作系统、数据库系统原理、编译原理
一、课程性质、目的和任务
数据结构实验是计算机专业的一门专业基础课,其目的是通过实验巩固学生所学理论知识,提高学生分析问题和解决实际问题的能力,培养学生建立问题模型和对模型求解的能力,以及设计算法和实现算法能力,为后继课程的学习和软件开发奠定基础。
二、教学基本要求
通过实验,使学生深入理解数据结构的基本概念,掌握数据的逻辑结构、存储结构及其差异,以及各种基本操作的实现。掌握基本的数据处理原理和方法的基础上,能够对算法进行基本的时间复杂度与空间复杂度进行设计与分析,能够选择合适的数据结构和方法进行问题求解,并采用 C 或C++ 语言设计和实现算法的能力。
三、实验内容及学时分配
实验大纲内容包括9个必做实验和2个选做实验,必做内容在规定的32个学时内完成。
实验一顺序表的基本操作的实现(必做,设计性实验,4学时)
1.实验目的
熟悉将算法转换成程序代码的过程,了解顺序表的逻辑结构特性,熟练掌握顺序表存储结构的C语言描述方法。熟练掌握顺序表的基本操作:查找、插入、删除、合并等,掌握顺序表的随机存取特性。
2.实验内容
(1)在非递减有序的顺序表中插入一个元素x,保持顺序表有序性。
(2)顺序表元素的逆置
(3)两个(有序或无序)顺序表的合并
要求用静态分配的一维数组和动态分配的一维数组来完成实验题目。分析静态分配的一维数组和动态分配的一维数组在顺序表基本操作实现上的共同点和区别。
对顺序表插入的算法,要求用两种方法实现:其一:自己编写实现函数;其二:调用顺序表基本操作ListInsert(SqList &L,int i,ElemType x),比较使用自己编写的插入函数和调用顺序表基本操作的函数两种实现方法之间的优缺点。对所编写的算法进行时间复杂度分析。
实验二单链表的基本操作(必做,设计性实验,4学时)
1.实验目的
了解线性表的链式存储结构和顺序存取特性,熟练掌握线性表的链式存储结构的C语言描述方法,熟练掌握动态链表的基本操作查找、插入、定位等,能在实际应用中选择适当的链表结构。掌握用链表表示特定形式的数据的方法,并能编写出有关运算的算法。
2.实验内容
(1)已知线性表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效算法,删除表中所有值大于mink且小于maxk的元素(若表中存在这样的元素)同时释放被删结点空间,并分析你的算法的时间复杂度(注意:mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。
(2)完成单链表上的如下操作:
①逆序建立单链表
②遍历单链表(输出单链表每个元素的值)
③在单链表第5个元素前插入一个值为999的元素.
④删除单链表第5个元素.
实验三算术表达式求值(必做,设计性实验,2学时)
1.实验目的
熟练掌握栈的基本操作,深入了解栈的特性,能在实际问题的背景下灵活运用他们,并加深对这种结构的理解。
2.实验内容
设计一个程序,演示用算符优先法对算术表达式求值的过程。以字符序列的形式从终端输入语法正确的、不含变量的整数表达式。利用教科书表3.1给出的算符优先关系,实现对算术四则运算混合运算表达式的求值,并仿照教科书的例子3-1演示在求值中运算符栈、运算数栈、输入字符和主要操作的变化。测试数据可以选择例子3-1的算术表达式 3*(7-2),或自选。
实验四栈和队列的基本操作的实现(必做,设计性实验,4学时)
1.实验目的
熟练掌握栈和队列的抽象数据类型,能在相应的应用问题中正确选用它们,熟练掌握栈和队列的实现方法(顺序和链式),两种存储结构和基本操作的实现算法,注意空和满的判断条件及它们的描述方法,掌握循环队列与其它顺序结构实现上的不同及解决办法,熟悉各种队列的基本操作在循环队列上的实现
2.实验内容
(1)用栈实现括号匹配的检验
(2)用栈实现形如a+b@b+a#的中心对称的字符序列的检验。
(3)用队列实现形如a+b@b+a#的中心对称的字符序列的检验
选择合适的存储结构(顺序栈或链式栈)表示栈,给出其定义,在上述存储结构上实现栈的基本操作:初始化、置栈空、入栈、出栈、取栈顶元素等。选择合适的存储结构(循环队列)表示队列,解决队空、队满判断条件相同的矛盾,实现基于循环队列的存储结构的基本操作,初始化、队空/满判断,入队、出队、取队头元素、求队列长度等,对所写出的算法进行时间复杂度分析
实验五二叉树的递归及非递归的遍历及其应用(必做,设计性实验,4学时)
1.实验目的
熟练掌握二叉树的二叉链表存储结构的C语言实现。掌握二叉树的基本操作-前序、中序、后序遍历二叉树的三种方法。了解非递归遍历过程中“栈”的作用和状态,而且能灵活
运用遍历算法实现二叉树的其它操作。
2.实验内容
(1)二叉树的二叉链表的创建
(2)二叉树的前、中、后序遍历的递归算法和非递归算法的实现
(3)求二叉树中叶子结点数目的递归算法。
(4)编写求二叉树深度的递归算法。
(5)编写判断二叉树是否相似的递归算法
(6)编写求二叉树左右子树互换的递归算法
(7)编写二叉树层序遍历的算法
(8)编写判断二叉树是否是完全二叉树的算法
创建二叉树的二叉链表结构、进行先、中、后序的递归函数显示不同遍历序列,结合习题了解二叉树遍历的应用实例。编写前、中、后、层序遍历的非遍历函数,注意用以前做过的栈和队列作辅助存储结构。掌握用遍历算法求解其它问题的方法。
实验六Huffman树及Huffman编码的算法实现(必做,验证性实验,2学时)
1.实验目的
熟悉掌握Huffman树的构造方法及Huffman编码的应用,了解Huffman树在通信、编码领域的应用过程。
2.实验内容
(1)输入一段100—200字的英文短文,存入一文件a中。
(2)写函数统计短文出现的字母个数n及每个字母的出现次数
(3)写函数以字母出现次数作权值,建Haffman树(n个叶子),给出每个字母的Haffman 编码。
(4)用每个字母编码对原短文进行编码,码文存入文件b中。
(5)用Haffman树对文件b中码文进行译码,结果存入文件c中,比较a,c是否一致,以检验编码、译码的正确性。
实验七图的深度优先遍历(选做,验证性实验,4学时)
1.实验目的
熟悉图的数组表示法和邻接表存储结构,掌握构造有向图、无向图的算法,在掌握以上知识的基础上,熟悉图的深度优先遍历算法,并实现。
2.实验内容
(1)图的数组表示法定义及基本操作的实现。
(2)图的邻接表表示法定义及基本操作的实现。
(3)写函数实现图的深度优先遍历(分别在两种结构上)
(4)在邻接表上实现拓扑排序、关键路径的求法,在邻接矩阵上实现最短路经、最小生成树的求法。
实验八查找算法的实现(必做,验证性实验,4学时)
1.实验目的
熟练掌握顺序表和有序表的查找方法,掌握其时间复杂度的分析方法
2.实验内容
(1)验证并设计顺序表的查找(顺序查找、折半查找)算法
(2)验证二叉排序树上的查找(创建、查找、插入)算法
(3)验证Hash表查找(Hash函数定义、建立,查找,插入)算法