《数据结构课程实验》大纲

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

《数据结构课程实验》大纲
一、《数据结构课程实验》的地位与作用
“数据结构”是计算机专业一门重要的专业技术基础课程,是计算机专业的一门核心

关键性课程。

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

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

由于以
下原因,使得掌握这门课程具有较大的难度:(1)内容丰富,学习量大,给学习带
来困难;
(2)贯穿全书的动态链表存储结构和递归技术是学习中的重点也是难点;
(3)所用到的技术多,而在此之前的各门课程中所介绍的专业性知识又不多,因而
加大了学习难度;
(4)隐含在各部分的技术和方法丰富,也是学习的重点和难点。

根据《数据结构课程》课程本身的技术特性,设置《数据结构课程实验》实践环节十
分重要。

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

实验学时为10。

二、《数据结构课程实验》的目的和要求
不少学生在解答习题尤其是算法设计题时,觉得无从下手,做起来特别费劲。

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

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

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

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

三、《数据结构课程实验》内容
课程实验共10学时,要求完成以下五个题目:
实习一约瑟夫环问题(2学时)
用循环链表实现约瑟夫环问题,熟悉链表结构的使用。

实习二八皇后问题(2学时)
在8×8的棋盘上放置彼此不受攻击的8个皇后,熟悉递归与回溯程序设计方法。

实习三二叉树基本操作(2学时)
创建、遍历、显示二叉树,通过二叉树的基本操作,掌握树结构的处理方法。

实习四哈夫曼编码与译码
针对字符集A及其各字符的频率值(可统计获得)给出其中给字符哈夫曼编码,并
针对一段文本(定义在A上)进行编码和译码,实现一个哈夫曼编码/译码系统。

实习五最小生成树问题(2学时)
在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。

四、《数据结构课程实验》考核方式
采用上机情况、程序质量、实习报告相结合的形式,满分为100分。

1.上机情况(30%)
包括出勤情况、调试表现、是否上网、玩游戏。

2.程序质量(50%) 3.实习报告(20%)
《数据结构课程实验》指导书
实习一线性表
本次实习的主要目的在于熟悉线性表的基本运算在两种存储结构上的实现,其中以熟悉各种链表的操作为侧重点。

通过本次实习还可帮助读者复习高级语言的使用方法。

1、城市链表 [问题描述]
将若干城市的信息,存入一个带头结点的单链表。

结点中的城市信息包括:城市名,城市的位置坐标。

要求能够利用城市名和位置坐标进行有关查找、插入、删除、更新等操作。

[基本要求]
(1)给定一个城市名,返回其位置坐标;
(2)给定一个位置坐标P和一个距离D,返回所有与P的距离小于等于D的城市。

[测试数据]
由学生依据软件工程的测试技术自己确定。

注意测试边界数据。

2、约瑟夫环 [问题描述] 约瑟夫(Joeph)问题的一种描述是:编号为1,2,?,n的n个人按顺时针方向围坐一圈,每人持有一个密码(正整数)。

一开始任选一个正整数作为报数上限值m,从第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数。

报m的人出列,将他的密码作为新的m值,从他在顺时针方向上的下一个人开始重新从1报数,如此下去,直至所有人全部出列为止。

试设计一个程序求出出列顺序。

[基本要求]
利用单向循环链表存储结构模拟此过程,按照出列的顺序印出各人的编号。

[测试数据]
m的初值为20;密码:3,1,7,2,4,8,4(正确的结果应为6,1,4,7,2,3,5)。

[实现提示]
程序运行后首先要求用户指定初始报数上限值,然后读取各人的密码。

设n≤30。

[选作内容]
向上述程序中添加在顺序结构上实现的部分。

3、线性表的逆置 [问题描述]
分别以不同存储结构实现线性表的就地逆置。

线性表的就地逆置就是在原表的存储空间内将线性表(a1,a2,a3,?,an)逆置为(an,an-1,?,a2,a1)。

[基本要求]
用顺序存储结构实现线性表的就地逆置,并将结果输出。

[测试数据]
由学生依据软件工程的测试技术自己确定。

注意测试边界数据,如空表。

[实现提示]
设三个连续的指针,分别指向当前结点、当前结点的前趋、当前结点的后继。

[选作内容]
利用单链表作为存储结构。

首先先建立线性表的带头结点的单链表表示形式,之后在不借助辅助结点空间的情况下实现单链表的逆置,并将结果输出。

4、长整数运算 [问题描述]
设计一个程序实现两个任意长的整数求和运算。

[基本要求]
利用双项循环链表实现长整数的存储,每个结点含一个整型变量。

任何整型变量的范
围是 -(215-1)~(215-1)。

输入和输出形式:按中国对于长整数的表示习惯,每四位
一组,组间用逗号隔开。

[测试数据]
(1) 0;0;应输出“0”。

(2) -2345,6789;-7654,3211;应输出“-1,0000,0000”。

(3) -9999,9999;1,0000,0000,0000;应输出“9999,0000,0001”。

(4)
1,0001,000;-1,0001,0001;应输出“0”。

(5) 1,0001,0001;-1,0001,0000;应
输出“1”。

[实现提示]
(1)每个结点中可以存放的最大整数为215-1=32767,才能保证两数相加不会溢出。

但若这样存,即相当于按32768进制数存,在十进制数与32768进制数之间的转换十分不
方便。

故可以在每个结点中仅存十进制数的4位,即不超过9999的非负整数,整个链表
视为万进制数。

(2)可以利用头结点数据域的符号代表长整数的符号。

用其绝对值
表示元素结点数目。

相加过程中不要破坏两个操作数链表。

两操作数的头指针存于指针数
组中是简化程序结构的一种方法。

不能给长整数位数规定上限。

[选作内容]
修改上述程序,使它在整型量范围是-(2n-1)~(2n-1)的计算机上都能有效地运行。

其中,n是由程序读入的参量。

输入数据的分组方法可以另行规定。

实习二栈、队列与递归算法设计
仅仅认识到栈和队列是两种特殊的线性表是远远不够的,本次实习的目的在于使读者
深入了解栈和队列的特征,以便在实际问题背景下灵活运用它们;同时还将巩固这两种结
构的构造方法,接触较复杂问题的递归算法设计。

1、数制转换问题 [问题描述]
将十进制数N和其它d进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除d取余法。

例如:(1348)10=(2504)8
N N div 8 N mod 8 1348 168 4 168 21 0 21 2 5 2 0 2 从中我们可以看出,最先产生的余数4是转换结果的最低位,这正好符合栈
的特性即后进先出的特性。

所以可以用顺序栈来模拟这个过程。

[基本要求]
对于键盘输入的任意一个非负的十进制整数,打印输出与其等值的八进制数。

由于上
述的计算过程是从低位到高位顺序产生的八进制数的各个数位,而打印输出,一般来说应
从高位到地位进行,恰好和计算过程相反。

因此可以先将计算过程中得到的八进制数的各
位进栈,待相对应的八进制数的各位均产生以后,再使其按顺序出栈,并打印输出。

即得
到了与输入的十进制数相对应的八进制数。

[测试数据]
由学生依据软件工程的测试技术自己确定。

注意测试边界数据。

2、回文判断 [问题描述]
试写一个算法,判断依次读入的一个以@为结束符的字母序列,是否为形如‘序列1 & 序列2’模式的字符序列。

其中序列1和序列2 中都不含字符‘&’,且序列2 是序列1
的逆序列。

例如,‘a+b&b+a’是属该模式的字符序列,而‘1+3&3-1’则不是。

[实现提示]
首先,序列1进栈,然后序列1出栈并与序列2比较。

[测试数据]
由学生依据软件工程的测试技术自己确定。

注意测试边界数据,如序列1和序列2均
为空串。

3、商品货架管理 [问题描述]
商品货架可以看成一个栈,栈顶商品的生产日期最早,栈底商品的生产日期最近。

上货时,需要倒货架,以保证生产日期较近的商品在较下的位置。

[基本要求]针对一种特定商品,实现上述管理过程。

[实现提示]
用栈模拟货架和周转空间。

[测试数据]
由学生依据软件工程的测试技术自己确定。

注意测试边界数据,如空栈。

4、括号匹配的检验 [问题描述]
假设表达式中允许有两种括号:圆括号和方括号,其嵌套的顺序随意,即(()[ ])或 [([ ] [ ])]等为正确格式,[( ])或(((]均为不正确的格式。

检验括号是否匹
配的方法可用“期待的紧迫程度”这个概念来描述。

例如:考虑下列的括号序列:
[ ( [ ] [ ] ) ]
感谢您的阅读,祝您生活愉快。

相关文档
最新文档