数据结构课程设计题目2015

更新时间:2023-12-10 11:56:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《数据结构》课程设计题目

1. 排序算法的性能分析

问题描述

设计一个测试程序,比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 基本要求

(1)对冒泡排序、直接排序、选择排序、箱子排序、堆排序、快速排序及归并排序算法进行比较。

(2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标:关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动)。 (3)输出比较结果。 选做内容

(1)对不同表长进行比较。 (2)验证各算法的稳定性。 (3)输出界面的优化。

2. 排序算法思想的可视化演示—1

基本要求

排序数据随机产生,针对随机案例,对冒泡排序、箱子排序、堆排序、归并算法,提供排序执行过程的动态图形演示。

3. 排序算法思想的可视化演示—2

基本要求

排序数据随机产生,针对随机案例,,对插入排序、选择排序、基数排序、快速排序算法,提供排序执行过程的动态图形演示。

4. 线性表的实现与分析

基本要求

① 设计并实现线性表。 ② 线性表分别采取数组(公式化描述)、单链表、双向链表、间接寻址存储方

式 ③ 针对随机产生的线性表实例,实现线性表的插入、删除、搜索操作动态演示(图

形演示)。

5. 等价类实现及其应用

问题描述:某工厂有一台机器能够执行n个任务,任务i的释放时间为ri(是一个整数),最后期限为di(也是整数)。在该机上完成每个任务都需要一个单元的时间。一种可行的调

度方案是为每个任务分配相应的时间段,使得任务i的时间段正好位于释放时间和最后期限之间。一个时间段不允许分配给多个任务。 基本要求:

使用等价类实现以上机器调度问题。 等价类分别采取两种数据结构实现。

6. 一元稀疏多项式计算器

问题描述

设计一个一元稀疏多项式简单计算器。 基本要求

一元稀疏多项式简单计算器的基本功能是: (1)输入并建立多项式;

(2)输出多项式,输出形式为整数序列:n,c1,e1,c2,e2,?,cn,en,其中n是多项式的项数,ci,ei,分别是第i项的系数和指数,序列按指数降序排序; (3)多项式a和b相加,建立多项式a+b; (4)多项式a和b相减,建立多项式a-b; (5)计算多项式在x处的值; (6)计算器的仿真界面(选做)

7. 长整数的代数计算

问题描述

应用线性数据结构解决长整数的计算问题。设计数据结构完成长整数的表示和存储,并编写算法来实现两长整数的加、减、乘、除等基本代数运算。 基本要求 ① 长整数长度在一百位以上。

② 实现两长整数在取余操作下的加、减、乘、除操作,即实现算法来求解a+b mod n, a-b mod n, a?b mod n, a?b mod n。

③ 输入输出均在文件中。 ④ 分析算法的时空复杂性。

8. 敢死队问题。

有M个敢死队员要炸掉敌人的一碉堡,谁都不想去,排长决定用轮回数数的办法来决定哪个战士去执行任务。如果前一个战士没完成任务,则要再派一个战士上去。现给每个战士编一个号,大家围坐成一圈,随便从某一个战士开始计数,当数到5时,对应的战士就去执行任务,且此战士不再参加下一轮计数。如果此战士没完成任务,再从下一个战士开始数数,被数到第5时,此战士接着去执行任务。以此类推,直到任务完成为止。排长是不愿意去的,假设排长为1号,请你设计一程序,求出从第几号战士开始计数才能让排长最后一个留下来而不去执行任务。

要求:至少采用两种不同的数据结构的方法实现。

9. 简单计算器

基本要求:

输入:不含变量的数学表达式的中缀形式,可以接受的操作符包括+、-、*、/、%和(、)。

输出: 如果表达式正确,则输出表达式的结果,如果表达式非法,则输出错误信息。 同时输出堆栈的状态变化过程。

注: 输入/输出形式可采取终端设备输入/输出,也可采用文件输入/输出,一个文件中可包含多个表达式

10. 迷宫问题-1

问题描述

以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。 基本要求

(1)实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路一三元组(i,j,d)的形式输出,其中:(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。

(2)编写递归形式的算法,求得迷宫中所有可能的通路; (3)以方阵形式输出迷宫及其通路 (4)输出堆栈的变化过程及探测的过程

11. 迷宫问题-2

程序开始运行时显示一个迷宫地图,迷宫中央有一只老鼠,迷宫的右下方有一个粮仓。游戏的任务是使用键盘上的方向键操纵老鼠在规定的时间内走到粮仓处。 要求:

(1)老鼠形象可辨认,可用键盘操纵老鼠上下左右移动; (2)迷宫的墙足够结实,老鼠不能穿墙而过;

(3)正确检测结果,若老鼠在规定时间内走到粮仓处,提示成功,否则提示失败; (4)添加编辑迷宫功能,可修改当前迷宫,修改内容:墙变路、路变墙; (5)找出走出迷宫的所有路径,以及最短路径;

利用序列化功能实现迷宫地图文件的存盘和读出等功能。

12. 应用等价类生成随机迷宫并寻找迷宫路径

问题描述:

使用等价类来构造一个N?N的从左上角到右下角只有一条路径的随机迷宫,然后在这一迷宫上寻找迷宫路径。该设计共包含如下四个部分:

① 等价类数据结构的设计和实现 ② 构建随机迷宫 ③ 寻找迷宫路径

④ 将迷宫和路径用图形方式画出

用图形方式将上述算法获得的随机迷宫及其上的最短路径画出。用线段来表示迷宫中的

墙,用在每个方格中心的点来表示路径。

13、跳表(Skip List)的实现与分析

基本要求

④ 构造并实现跳表(Skip List)的ADT ADT中应包括初始化、查找、插入、删除

等基本操作。

② 分析各基本操作的时间复杂性。

③ 针对一个实例实现Skip List的动态演示(图形演示)。

14. LZW压缩算法及应用

基本要求

① 在一个文本文件上实现LZW压缩和解压缩,其中每个字符就是该文本的8位ASCII码。 ② 在实现LZW过程中需要仔细考虑如何在编译表中找到匹配或找不到匹配,需要注意匹配算法的时间、空间开销。

③ (选做)应用LZW算法实现256色灰度BMP图像文件的压缩和解压缩。

15. 二叉树的实现及分析

基本要求

(1)设计实现链表存储的二叉树ADT (2)实现基本操作实现过程(前序遍历、中序遍历、后序遍历、层序遍历等)的动态演示(图形演示)。

(3)应用二叉树,实现信号放大器的设置。

16. 应用堆实现一个优先队列并实现作业的优先调度

问题描述

优先队列priority queue是一种可以用于很多场合的数据结构,应用堆结构设计并实现一个优先队列。应用该优先队列实现作业的优先调度:

一个作业ti =(si,ei),si为作业的开始时间(进入时间),ei为作业的结束时间(离开时间)。作业调度的基本任务是从当前在系统中的作业中选取一个来执行,如果没有作业则执行nop操作。本题目要求的作业调度是基于优先级的调度,每次选取优先级最高的作业来调度,优先级用优先数(每个作业一个优先数pi)表征,优先数越小,优先级越高。作业ti进入系统时,即si时刻,系统给该作业指定其初始优先数pi = ei - si,从而使越短的作业优先级越高。该优先数在作业等待调度执行的过程中会不断减小,调整公式为:pi = pi - wi,其中的wi为作业ti的等待时间:wi = 当前时间-si。一旦作业被调度,该作业就一直执行,不能被抢占,只有当前执行作业指向完成时,才产生下一轮调度。所以可以在每次调度前动态调整各作业的优先数。

编程实现这样一个作业调度系统。

基本要求

① 以堆结构实现优先队列。②作业集合中的各作业随机生成,根据作业的s属性

和e属性动态调整作业队列,不断加入作业,作业结束删除作业。

③要对作业调度的结果给出清晰的输出信息,包括:何时作业进入,何时调度哪个作业,何时离开,每个作业等待多长时间,优先数的动态变化情况等。 ④

17. 哈夫曼编/译码器

问题描述

利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼码的编译码系统。 基本要求

一个完整的系统应具有以下功能: (1)I:初始化(Initialization)。从终端读入字符集大小n及n个字符和m个权值,建立哈夫曼树,并将它存于文件hfmtree中。 (2)C:编码(Coding)。利用已建好的哈夫曼树(如不在内存,则从文件hfmtree中读入),对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中。 (3)D:解码(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入文件textfile中。

(4)P:打印代码文件(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时,将此字符形式的编码文件写入文件codeprint中。 (5)T:打印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。

18. AVL树的实现及分析

基本要求 ① 编写AVL树判别程序,并判别一个二叉搜索树是否为AVL树。二叉搜索树用其先序遍

历结果表示,如:5,2,1,3,7,8。 ② 实现AVL树,其上的基本操作包括:Search,Insert,Delete,和Ascend; ③ 实现基本操作的动态演示(图形演示)。 ④ 扩展:

a.实现带索引的AVL搜索树,实现其上的基本操作:Search,Insert,Delete,

IndexSearch,IndexDelete和Ascend。前5种函数的时间复杂性应为O(logn),最后一种函数的时间复杂性应为O(n)。

b. 搜索树中有一些元素的关键值相同。

19. 直方图问题

问题描述:

在直方图问题中,从一个具有n个关键值的集合开始,要求输出不同关键值的列表以及每个关键值在集合中出现的次数(频率)。下图给出了一个含有10个关键值的例子。图a给出了直方图的输入,直方图的表格形式如图b所示,直方图的图形形式如图c 所示。直方图一般用来确定数据的分布,例如,考试的分数、图象中的灰色比例、在生产商注册的汽车和居住

2)计算每人的平均成绩,按平均成绩排序,并生成文件。

3)求出各门课程的平均成绩、最高分、最低分、不及格人数、60~69分人数、70~79分人数、80~89分人数、90分以上人数。

4)根据姓名或学号查询某人的各门课成绩,重名情况也能处理 (3)界面美观

35. 检查网络

给定一个计算机网络以及机器间的双向连线列表,每一条连线与允许两端的计算机进行直接的文件传输,其他计算机间若存在一条连通路径,也可以进行间接的文件传输。 要求实现功能:

任意指定两台计算机,判断它们之间是否可以进行文件传输?

判断整个网络中是否任意两台机器间都可以文件传输?若不可以,请给出当前网络中连通分量的个数及各个连通分量中的机器。 增加两台计算机之间的连线。 基本要求:

至少使用两种结构实现。

36. 调度问题

(1)机器调度

现有n件任务和无限多台的机器,任务可以在机器上得到处理。每件任务的开始时间为si,完成时间为fi, si < fi 。[si, fi]为处理任务i的时间范围。两个任务i,j重叠是指两个任务的时间范围区间有重叠,而并非是指i,j的起点或终点重合。每台机器在任何时刻最多只处理一个任务。最优分配是指使用的机器最少的可行分配方案。 要求:

输入任务个数及每个任务的名称,开始时间,完成时间 给出最优分配方案。 (2)任务调度

现在有n项作业,J1,J2,?Jn,要求按顺序执行,已知各作业对应的运行所需时间分别为t1,t2,?tn,要求这些作业在一个处理器上运行,并且要求完成这n个作业的平均完成时间最小。注:每个作业的完成时间等于作业的等待时间与它的执行时间的和,这里假设一旦开始运行一个作业,那么在该作业完成之前,其他作业都只能等待。 要求:

输入作业个数及每个作业的名称,执行时间 给出最优调度方案。

37. 学校超市选址问题(带权有向图的中心点)。

基本要求:对于某一学校超市,其他各单位到其的距离不同,同时各单位人员去超市的频度也不同。请为超市选址,要求实现总体最优。

38. 设计散列表实现电话号码查找系统。

基本要求:

(1)设每个记录有下列数据项:电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表; (3)查找并显示给定电话号码的记录; (4)查找并显示给定用户名的记录。

(5)尝试不同类型处理冲突的方法,考察平均查找长度的变化。

39. 学生搭配问题。

一班有m个女生,有n个男生(m不等于n),现要开一个舞会。男女生分别编号坐在舞池的两边的椅子上。每曲开始时,依次从男生和女生中各出一人配对跳舞,本曲没成功配对者坐着等待下一曲找舞伴。

请设计一系统模拟动态地显示出上述过程,要求如下: (1)输出每曲配对情况;

(2)计算出任何一个男生(编号为X)和任意女生(编号为Y),在第K曲配对跳舞的情况。至少求出K的两个值;

(3)尽量设计出多种算法及程序。 提示:用队列来解决比较方便。

40. 扫雷游戏

实现一个N*M的扫雷游戏。

41 马的遍历问题:

设计程序完成如下要求:在中国象棋盘上,对任意位置上放置一个马,均能选择一个合适的路线,使得该棋子能够按照象棋的规则不重复的走过棋盘上的每一位置。 要求:(1)依次输出走过的各位置的坐标

(2)最好能画出棋盘的图形形式,并在其上动态的标注行走过程 (3)程序能方便的移植到其他规格的棋盘上。

42.在 8×8的国际象棋棋盘上,如果放置若干个马后,使得整个棋盘的任意空位置上所

放置的棋子均能被这些马吃掉,则称这组放置为棋盘的一个满覆盖。若去掉满覆盖中的任意一个棋子都会使这组放置不再是满覆盖,则称这一满覆盖为极小满覆盖。设计程序完成如下要求:

(1)求解一个极小满覆盖

(2)最好能画出棋盘的图形形式,并在其上动态的演示试探过程 (3)程序能方便的移植到其他规格的棋盘上。

43.在中国象棋上实现上一课题的任务。

要求:除了上一课题的要求外,还要考虑到“别退”的规定。

44.简易五子棋游戏:设计程序实现一个人机对弈的简单的五子棋游戏。游戏规

则如下:在19×19的围棋交叉点上,对弈双方轮流放子,最先在棋盘上摆成(按照水平、垂直或者对角线方向)连续五个子的一方为胜方。

45.约瑟夫环

[问题描述]

约瑟夫(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。

46.猴子吃桃子问题

有一群猴子摘了一堆桃子,它们每天都吃当前桃子的一半且再多吃一个,到了第10天就只剩下一个桃子,用多种方法实现求出原来这群猴子共摘了多少个桃子。

47.活期储蓄账目管理

活期储蓄处理中,储户开户、销户、存入、支出活动频繁,系统设计要求: 1) 能比较迅速地找到储户的账户,以实现存款、取款记账

2) 能比较简单、迅速的实现插入和删除,以实现开户和销户的需要

48.设计一个计算机管理系统完成图书管理基本业务

基本要求:

1) 每种书的登记内容包括书号、书名、著作者、现存量和库存量 2) 对书号建立索引表(线性表)以提高查找效率(索引表采用树表) 3) 系统主要功能如下:

*采编入库:新购一种书,确定书号后,登记到图书账目表中,如果表中已有,则只将库存量增加;

*借阅:如果一种书的现存量大于0,则借出一本,登记借阅这的书证号和归还日期,改变现存量

*归还:注销对借阅者的登记,改变该书的现存量。

49.数制转换问题

任意给定一个M进制的数X,请实现如下要求 1) 求出此数x的10进制值

2) 实现对X向任意的一个非M进制的数的转换 3) 至少用两种以上的方法实现上述要求

本文来源:https://www.bwwdw.com/article/3kz5.html

Top