XX大学课程设 计 课程名称: 数 据 结 构 与 算 法 院(部)名 称: 信息与计算科学学院 组长姓名学号 同组人员姓名 指导教师姓名: 设 计 时 间: 2010.6.7----2009.6.27 一、《数据结构与算法》课程设计参考题目 (一)参考题目一(每位同学选作一个,同组人员不得重复) 1、编写函数实现顺序表的建立、查找、插入、删除运算。 1 2、编写函数分别实现单链表的建立、查找、插入、删除、逆置算法。 3、编写函数实现双向链表的建立、插入、删除算法。 4、编写函数实现顺序栈的进栈、退栈、取栈顶的算法。 5、编写函数实现链栈的进栈、退栈、取栈顶的算法。 6、编写函数实现双向顺序栈的判空、进栈、出栈算法。 7、编写函数实现循环队列的判队空、取队头元素、入队、出队算法。 8、编写函数实现链环队列的判队空、取队头节点、入队、出队算法。 9、编写函数实现串的,求串长、连接、求字串、插入、删除等运算。 10、分别实现顺序串和链串的模式匹配运算。 11、实现二叉树的建立,前序递归遍历和非递归遍历算法。 12、实现二叉树的建立,中序递归遍历和非递归遍历算法。 13、实现二叉树的建立,后序递归遍历和非递归遍历算法。 14、实现二叉树的中序线索化,查找*p 结点中序下的前驱和后继结点。 15、分别以临接表和邻接矩阵作为存储就够实现图的深度优先搜索和广度优先搜索 算法。 16、利用线性探测处理冲突的方法实现散列表的查找和插入算法。 (二)参考题目二(每三人一组,任选三个题目完成) 1.运动会分数统计(限 1 人完成) 任务:参加运动会有 n 个学校,学校编号为 1……n。比赛分成 m 个男子项目, 和 w 个女子项目。项目编号为男子 1……m,女子 m+1……m+w。不同的项目取前 五名或前三名积分;取前五名的积分分别为:7、5、3、2、1,前三名的积分分别为: 5、3、2;哪些取前五名或前三名由学生自己设定。(m<=20,n<=20) 功能要求: 1)可以输入各个项目的前三名或前五名的成绩; 2)能统计各学校总分, 3)可以按学校编号或名称、学校总分、男女团体总分排序输出; 4)可以按学校编号查询学校某个项目的情况;可以按项目编号查询取得前三或前五名 的学校。 5)数据存入文件并能随时查询 6)规定:输入数据形式和范围:可以输入学校的名称,运动项目的名称 输出形式:有合理的提示,各学校分数为整形 界面要求:有合理的提示,每个功能可以设立菜单,根据提示,可以完成相关 的功能要求。 存储结构:学生自己根据系统功能要求自己设计,但是要求运动会的相关数据 要存储在数据文件中。(数据文件的数据读写方法等相关内容在 c 语言程序设计的书 上,请自学解决)请在最后的上交资料中指明你用到的存储结构; 测试数据:要求使用 1、全部合法数据;2、整体非法数据;3、局部非法数据。进行 程序测试,以保证程序的稳定。测试数据及测试结果请在上交的资料中写明; 2 2.飞机订票系统 任务:通过此系统可以实现如下功能: 录入: 可以录入航班情况(数据可以存储在一个数据文件中,数据结构、具体数据自 定) 查询: 可以查询某个航线的情况(如,输入航班号,查询起降时间,起飞抵达城市, 航班票价,票价折扣,确定航班是否满仓); 可以输入起飞抵达城市,查询飞机航班情况; 订票:(订票情况可以存在一个数据文件中,结构自己设定) 可以订票,如果该航班已经无票,可以提供相关可选择航班; 退票: 可退票,退票后修改相关数据文件; 客户资料有姓名,证件号,订票数量及航班情况,订单要有编号。 修改航班信息: 当航班信息改变可以修改航班数据文件 要求: 根据以上功能说明,设计航班信息,订票信息的存储结构,设计程序完成功能; 3.文章编辑 功能:输入一页文字,程序可以统计出文字、数字、空格的个数。 静态存储一页文章,每行最多不超过 80 个字符,共 N 行;要求(1)分别统计 出其中英文字母数和空格数及整篇文章总字数;(2)统计某一字符串在文章中出现 的次数,并输出该次数;(3)删除某一子串,并将后面的字符前移。 存储结构使用线性表,分别用几个子函数实现相应的功能; 输入数据的形式和范围:可以输入大写、小写的英文字母、任何数字及标点符 号。 输出形式:(1)分行输出用户输入的各行字符;(2)分 4 行输出“全部字母数 “、“数字个数“、“空格个数“、“文章总字数“(3)输出删除某一字符串后的文章; 4.宿舍管理查询软件 1)任务:为宿舍管理人员编写一个宿舍管理查询软件, 程序设计要求: A.采用交互工作方式 B.建立数据文件,数据文件按关键字(姓名、学号、房号)进行排序(冒泡、选择、 插入排序等任选一种) 2)查询菜单: (用二分查找实现以下操作) A.按姓名查询 B.按学号查询 C.按房号查询 3)打印任一查询结果(可以连续操作) 3 5.校园导航问题(限 1 人完成) 设计要求:设计你的学校的平面图,至少包括 10 个以上的场所,每两个场所间可以 有不同的路,且路长也可能不同,找出从任意场所到达另一场所的最佳路径。 6.教学计划编制问题 设计要求:针对计算机系本科课程,根据课程之间的依赖关系(如离散数学应在数 据结构之前开设)制定课程安排计划,并满足各学期课程数目大致相同。 7.散列法的实验研究 散列法中,散列函数构造方法多种多样,同时对于同一散列函数解决冲突的方法也 可以不同。两者是影响查询算法性能的关键因素。对于几种典型的散列函数构造方 法,做实验观察,不同的解决冲突方法对查询性能的影响。 8.图书借阅管理系统 主要分为两大功能: 1)图书管理(增加图书、查询图书、删除图书、图书借阅、还书); 2)会员管理(增加会员、查询会员、删除会员、借书信息); 9.学生成绩管 实现功能:输入、输出、插入、删除、查找、追加、读入、显示、保存、拷贝、 排序、退出。 10.活期储蓄帐目管理 活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求: 1)能比较迅速地找到储户的帐户,以实现存款、取款记账; 2)能比较简单,迅速地实现插入和删除,以实现开户和销户的需要。 11.二叉排序树的实现 用顺序和二叉链表作存储结构 1)以回车('\n')为输入结束标志,输入数列 L,生成一棵二叉排 序树 T; 2)对二叉排序树 T 作中序遍历,输出结果; 3)输入元素 x,查找二叉排序树 T,若存在含 x 的结点,则删除该结点,并作中序遍历(执行 操作 2);否则输出信息“无 x”; 12.最小生成树问题 设计要求:在 n 个城市之间建设网络,只需保证连通即可,求最经济的架设方法。 存储结构采用多种。求解算法多种。 @@@@@13.通讯录的制作 设计目的:用〈〈数据结构〉〉中的双向链表作数据结构,结合 C 语言基本知识。编 写一个通讯录管理系统。以把所学数据结构知识应用到实际软件开发中去。 设计内容:本系统应完成一下几方面的功能: 4 1)输入信息——enter(); 2)显示信息———display( ); 3)查找以姓名作为关键字 ———search( ); 4)删除信息———delete( ); 5)存盘———save ( ); 6)装入———load( ) ; 设计要求: 1)每条信息至包含 :姓名(NAME )街道(STREET)城市(CITY)邮编(EIP) 国家(STATE)几项 2)作为一个完整的系统,应具有友好的界面和较强的容错能力 3)上机能正常运行,并写出课程设计报告 14.哈夫曼编码/译码器 【问题描述】 设计一个利用哈夫曼算法的编码和译码系统,重复地显示并处理以下项目,直到选 择退出为止。 【基本要求】 1)将权值数据存放在数据文件(文件名为 data.txt,位于执行程序的当前目录中) 2)分别采用动态和静态存储结构 3)初始化:键盘输入字符集大小 n、n 个字符和 n 个权值,建立哈夫曼树; 4)编码:利用建好的哈夫曼树生成哈夫曼编码; 5)输出编码; 6)设字符集及频度如下表: 字符 空格 A B C D E F G H I J K L M 频度 186 64 13 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 57 63 15 1 48 51 80 23 8 18 1 16 1 【进一步完成内容】 1)译码功能; 2)显示哈夫曼树; 3)界面设计的优化。 15.图书管理系统 【问题描述】 设计一个计算机管理系统完成图书管理基本业务。 【基本要求】 1)每种书的登记内容包括书号、书名、著作者、现存量和库存量; 2)对书号建立索引表(线性表)以提高查找效率; 3)系统主要功能如下: *采编入库:新购一种书,确定书号后,登记到图书帐目表中,如果表中已有,则只 将库存量增加; *借阅:如果一种书的现存量大于 0,则借出一本,登记借阅者的书证号和归还期限, 改变现存量; 5 *归还:注销对借阅者的登记,改变该书的现存量。 【进一步完成内容】 1)系统功能的进一步完善; 2)索引表采用树表。 3)设计内容 4)程序流程图 5)源程序 6)软件测试报告(包括所用到的数据及结果) 16.散列表的设计与实现 【问题描述】 设计散列表实现电话号码查找系统。 【基本要求】 1)设每个记录有下列数据项:电话号码、用户名、地址; 2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; 3)采用一定的方法解决冲突; 4)查找并显示给定电话号码的记录; 5)查找并显示给定用户名的记录。 【进一步完成内容】 1)系统功能的完善; 2)设计不同的散列函数,比较冲突率; 3)在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度 的变化。 17.顺序结构、动态链表结构下的一元多项式的加法、减法、乘法的实现。 设有一元多项式 Am(x)和 Bn(x). Am(x)=A0+A1x1+A2x2+A3x3+… +Amxm Bn(x)=B0+B1x1+B2x2+B3x3+… +Bnxn 请实现求 M(x)= Am(x)+Bn(x)、M(x)= Am(x)-Bn(x)和 M(x)= Am(x)×Bn(x)。 要求: 1)首先判定多项式是否稀疏 2)分别采用顺序和动态存储结构实现; 3)结果 M(x)中无重复阶项和无零系数项; 4)要求输出结果的升幂和降幂两种排列情况 18.简易文本编辑器 要求: 1)具有图形菜单界面; 2)查找,替换(等长,不等长),插入(插串,文本块的插入)、块移动(行块,列块 6 移动),删除 3)可正确存盘、取盘; 4)正确显示总行数。 19.二叉树的中序、前序、后序的递归、非递归遍历算法,层次序的非递归遍历算法 的实现,应包含建树的实现。(限 1 人完成) 要求:遍历的内容应是千姿百态的。 树与二叉树的转换的实现。以及树的前序、后序的递归、非递归遍历算法,层次序 的非递归遍历算法的实现,应包含建树的实现。 要求:遍历的内容应是千姿百态的。 20.学生搭配问题 一班有 m 个女生,有 n 个男生(m 不等于 n),现要开一个舞会. 男女生分别编号坐在舞 池的两边的椅子上.每曲开始时,依次从男生和女生中各出一人配对跳舞, 本曲没成功 配对者坐着等待下一曲找舞伴. 请设计一系统模拟动态地显示出上述过程,要求如下: 1)输出每曲配对情况 2)计算出任何一个男生(编号为 X)和任意女生(编号为 Y),在第 K 曲配对跳舞的情况.至 少求出 K 的两个值. 3)尽量设计出多种算法及程序,可视情况适当加分 提示:用队列来解决比较方便. 21.猴子吃桃子问题 有一群猴子摘了一堆桃子,他们每天都吃当前桃子的一半且再多吃一个,到了第 10 天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。 要求: 1)采用数组数据结构实现上述求解 2)采用链数据结构实现上述求解 3)采用递归实现上述求解 22.数制转换问题 任意给定一个 M 进制的数 x ,请实现如下要求 1)求出此数 x 的 10 进制值(用 MD 表示) 2)实现对 x 向任意的一个非 M 进制的数的转换。 3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解 决)。 23.排序综合 7 利用随机函数产生 N 个随机整数(20000 以上),对这些数进行多种方法进行排序。 要求: 1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、 起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不 同的文件中。 2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出 其中两种较快的方法。 3)如果采用 4 种或 4 种以上的方法者,可适当加分。 24.学生成绩管理系统 现有学生成绩信息文件 1(1.txt),内容如下 姓名 学号 语文 数学 英语 张明明 01 67 78 82 李成友 02 78 91 88 张辉灿 03 68 82 56 王露 04 56 45 77 陈东明 05 67 38 47 …. .. .. .. … 学生成绩信息文件 2(2.txt),内容如下: 姓名 学号 语文 数学 英语 陈果 31 57 68 82 李华明 32 88 90 68 张明东 33 48 42 56 李明国 34 50 45 87 陈道亮 35 47 58 77 …. .. .. .. … 试编写一管理系统,要求如下: 1)实现对两个文件数据进行合并,生成新文件 3.txt 2)抽取出三科成绩中有补考的学生并保存在一个新文件 4.txt 3)合并后的文件 3.txt 中的数据按总分降序排序(至少采用两种排序方法实现) 4)输入一个学生姓名后,能查找到此学生的信息并输出结果(至少采用两种查找方法实 现) 5)要求使用结构体,链或数组等实现上述要求. 6)采用多种方法且算法正确者,可适当加分. 25.图的遍历的实现 要求: 1)先任意创建一个图; 2)图的 DFS,BFS 的递归和非递归算法的实现 3)要求用有向图和无向图分别实现 4)要求用邻接矩阵、邻接表多种结构存储实现 26.线索二叉树的应用 8 要求:实现线索树建立、插入、删除、恢复线索的实现。 27.稀疏矩阵应用 要求:实现三元组,十字链表下的稀疏矩阵的加、转、乘的实现。 (1)稀疏矩阵的存储 (2)稀疏矩阵加法 (3)矩阵乘法 (4)矩阵转置 28.树的应用 要求:实现树与二叉树的转换的实现。以及树的前序、后序的递归、非递归算法, 层次序的非递归算法的实现,应包含建树的实现。 29. 文本文件单词的检索与计数 设计要求与分析: 要求编程建立一个文本文件,每个单词不包含空格且不跨行,单词由字符序列构成 且区分大小写;统计给定单词在文本文件中出现的总次数;检索输出某个单词出现 在文本中的行号、在该行中出现的次数以及位置。该设计要求可分为三个部分实现: 其一,建立文本文件,文件名由用户用键盘输入;其二,给定单词的计数,输入一 个不含空格的单词,统计输出该单词在文本中的出现次数;其三,检索给定单词, 输入一个单词,检索并输出该单词所在的行号、该行中出现的次数以及在该行中的 相应位置。 (1).建立文本文件 (2)给定单词的计数 (3)检索单词出现在文本文件中的行号、次数及其位置 (4)主控菜单程序的结构 ① 头文件包含 ② 菜单选项包含 建立文件、单词定位、单词计数、退出程序 ③ 选择 1-4 执行相应的操作,其他字符为非法。 30.任意长的整数加法) 问题描述:设计一个程序实现两个任意长的整数的求和运算。 基本要求:利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程 序。要求输入和输出每四位一组,组间用逗号隔开。如: 1,0000,0000,0000,0000。 31.串的查找和替换 问题描述:打开一篇英文文章,在该文章中找出所有给定的单词,然后对所有给定 的单词替换为另外一个单词,再存盘。 9 32.约瑟夫环 问题描述:编号为 1,2… n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码 (正整数)。一开始任选一个正整数作为报数的上限值 m,从第一个人开始按顺时针 方向自 1 开始顺序报数,报到 m 时停止报数,报 m 的人出列,将他的密码作为新的 m 值,从他的顺时针方向上的下一个开始重新从 1 报数,如此下去,直至所有人全 部出列为止,设计一个程序求出出列顺序。 基本要求: 1、利用单循环链表作为存储结构模拟此过程; 2、键盘输入总人数、初始报数上限值 m 及各人密码; 3、按照出列顺序输出各人的编号。 33.构造可以使 n 个城市连接的最小生成树 问题描述:给定一个地区的 n 个城市间的距离网,用 Prim 算法或 Kruskal 算法建立 最小生成树,并计算得到的最小生成树的代价。 基本要求: 1、城市间的距离网采用邻接矩阵表示,邻接矩阵的存储结构定义采用课本中给出的 定义,若两个城市之间不存在道路,则将相应边的权值设为自己定义的无穷大值。 要求在屏幕上显示得到的最小生成树中包括了哪些城市间的道路,并显示得到的最 小生成树的代价。 2、表示城市间距离网的邻接矩阵(要求至少 6 个城市,10 条边) 3、最小生成树中包括的边及其权值,并显示得到的最小生成树的代价。 34.客户消费积分管理系统 问题描述:针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行 不同程度的打折优惠。 基本要求: 1. 采用一定的存储结构进行客户信息的存储; 2. 对客户的信息可以进行修改、删除、添加; 3. 能够根据消费情况进行客户积分的计算; 4. 根据积分情况实行不同程度的打折优惠; 35.产品进销存管理系统 问题描述:针对某一种行业的库房的产品进销存情况进行管理。 基本要求: 1. 采用一定的存储结构对库房的货品及其数量进行分类管理; 2. 可以进行产品类的添加、产品的添加、产品数量的添加; 3. 能够查询库房每种产品的总量、进货日期、销出数量、销售时间等; 36. 特殊矩阵的压缩存储算法的实现) 问题描述:对于特殊矩阵可以通过压缩存储减少存储空间。 基本要求: 1.针对多种特殊矩阵进行压缩存储,并能显示压缩后的相关地址和值; 2.输入在原来特殊矩阵中的地址,要求能从压缩后的矩阵中读出相应的值; 10 37.算术表达式的求解 问题描述:给定一个算术表达式,通过程序求出最后的结果。 基本要求: 1.从键盘输入要求解的算术表达式; 2.采用栈结构进行算术表达式的求解过程; 3.能够判断算术表达式正确与否; 4.对于错误表达式给出提示; 5.对于正确的表达式给出最后的结果; 38.实时监控报警系统 问题描述:建立一个报警和出警管理的系统 基本要求: 1. 采用一定的存储结构存储报警信息,要求有内容、时间; 2. 有一次的出警就应该在待处理的信息中删除这条信息; 3. 记录出警信息; 4. 待处理信息过多时会发出警告; 39. 车厢调度 问题描述:假设停在铁路调度站入口处的车厢序列的编号一次为 1,2,3,4。设计 一个程序,求出所有可能由此输出的长度为 4 的车厢序列。 40.迷宫问题(栈) 问题描述: 以一个 m*n 的长方阵表示迷宫,0 和 1 分别表示迷宫中的通路和障碍。设计一个程 序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 基本要求: 首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。 求得的通路以三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d 表示走到下一坐标的方向,如:对于下列数据的迷宫,输出的一条通路为: (1,1,1),(1,2,2),(3,2,3),(3,1,2),…。 测试数据: 迷宫的测试数据如下:左下角(1,1)为入口,右下角(8,9)为出口。 实现提示: 计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某个方向进行探 索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出 口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设的 迷宫没有通路。 可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为 (n,n)。为处理方便起见,可在迷宫的四周加一圈障碍。对于迷宫中任一位置,均可 约定有东、南、西、北四个方向可通。 选做内容: (1)编写递归形式的算法,求得迷宫中所有可能的通路; (2)以方阵形式输出迷宫及其通路。 11 二.本课程设计的时间安排和组织实施 本课程设计是在的 16 周到 18 周进行的,学生在三周内完成了四个题目,在第 19 周的星期一到星期二进行检查和收取学生所做的设计(包括打印的报告,电子文 档和源程序,同时进行简单的答辩)。 此设计为了培养学生独立分析问题和解决问题的能力,以及团队合作的精神, 采用三(四)人分为一组,共完成 6 个题目,前 3 个为参考题目(一)中的题目, 这是个人独立完成,最后 3 个题目选参考题目(二)中,为小组合作完成,同时要 体现出不同的地方。 每周固定安排两次辅导,如果过程中有什么问题随时安排时间辅导,也通过电 子邮件进行辅导。 三、成绩评定: 设计成绩根据口试时程序运行答辩情况(20 分),程序的结构是否合理(10 分), 算法说明的清晰程度(10 分),上交磁盘中程序存放的规范程度(10 分),课程设计 总结情况(10 分),课程设计过程中的课程设计进展情况(10 分),独立完成情况 (学生间不相互雷同)(20 分),以及团队配合情况(10 分)来评判。 总体设计要求与设计报告 设计要求: 模块化程序设计 锯齿型书写格式 必须上机调试通过 小组独立完成、不得抄袭、结合最终结果和答辩情况给出成绩。 设计报告格式 1、设计目的 2、总体设计(程序设计组成框图、流程图) 3、详细设计(模块功能说明(如函数功能、入口及出口参数说明,函数调用关系描 述等) 12 4、调试与测试:调试方法,测试结果的分析与讨论,测试过程中遇到的主要问题及 采取的解决措施 5、源程序清单和执行结果:清单中应有足够的注释 6、报告的字数,不算源代码清单不少于 4 页,按规定的模板封面输出,不准自定义封 面格式。 提交报告的格式 正文宋体小四号字 每个自然段开始空两格. 文中英文用新罗马(time new roman),四号 源程序清单用英文新罗马五号 13 本文档由香当网(https://www.xiangdang.net)用户上传