数据结构课程设计题目及说明.docx

上传人:b****6 文档编号:6290621 上传时间:2023-01-05 格式:DOCX 页数:14 大小:36.48KB
下载 相关 举报
数据结构课程设计题目及说明.docx_第1页
第1页 / 共14页
数据结构课程设计题目及说明.docx_第2页
第2页 / 共14页
数据结构课程设计题目及说明.docx_第3页
第3页 / 共14页
数据结构课程设计题目及说明.docx_第4页
第4页 / 共14页
数据结构课程设计题目及说明.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构课程设计题目及说明.docx

《数据结构课程设计题目及说明.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计题目及说明.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构课程设计题目及说明.docx

数据结构课程设计题目及说明

目录

1一元稀疏多项式计算器2

2迷宫问题2

3哈夫曼编/译码器3

4教学计划编制问题4

5成绩分析问题5

6二叉排序树与平衡二叉树的实现6

7图的基本操作与实现6

8全国交通咨询模拟6

9内部排序算法的性能分析7

10背包问题的求解7

11简单个人书管理系统的设计与实现8

12简易电子表格的设计8

13停车厂模拟管理程序的设计与实现9

14农夫过河问题的求解9

15电话号码查询系统10

16航班订票系统11

17哈夫曼编码的实现11

18最小生成树问题11

19算术表达式求值11

20综合排序算法的比较12

21散列法的试验研究12

题目难易程度及选题说明:

–第一类(最简单类):

5、11、13、15、19、21共6题,限选0~1题

–第二类(较简单类):

2、10、14、16、18、20共6题。

限选1题

–第三类(较难类):

1、3、4、7、17共5题。

限选1题及以上

–第四类(最难类):

6、8、9、12共4题。

不限

1一元稀疏多项式计算器

[问题描述]

设计一个一元稀疏多项式简单计算器。

[基本要求]

一元稀疏多项式简单计算器的基本功能是:

(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)计算器的仿真界面。

(选做)

[测试数据]

(1)(2x+5x8-3.1x11)+(7-5x8+11x9)=(-3.1x11+11x9+2x+7)

(2)(6x-3-x+4.4x2-1.2x9)-(-6x-3+5.4x2-x2+7.8x15)=(-7.8x15-1.2x9-x+12x-3)

(3)(1+x+x2+x3+x4+x5)+(-x3-x4)=(x5+x2+x+1)

(4)(x+x3)+(-x-x3)=0

(5)(x+x2+x3)+0=(x3+x2+x)

[实现提示]

用带表头结点的单链表存储多项式,多项式的项数存放在头结点中。

2迷宫问题

[问题描述]

以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

[基本要求]

(1)实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。

求得的通路以三元组(i,j,d)的形式输出,其中:

(i,j)指示迷宫中的一个坐标,d表示走到下一坐标的方向。

(2)编写递归形式的算法,求得迷宫中所有可能的通路;

(3)以方阵形式输出迷宫及其通路。

(选做)

[测试数据]

迷宫的测试数据如下:

左上角(1,1)为入口,右下角(9,8)为出口。

12345678

0

0

1

0

0

0

1

0

0

0

1

0

0

0

1

0

0

0

0

0

1

1

0

1

0

1

1

1

0

0

1

0

0

0

0

1

0

0

0

0

0

1

0

0

0

1

0

1

0

1

1

1

1

0

0

1

1

1

0

0

0

1

0

1

1

1

0

0

0

0

0

0

[实现提示]

计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。

假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。

可以二维数组存储迷宫数据,通常设定入口点的下标为(1,1),出口点的下标为(m,n)。

为处理方便起见,可在迷宫的四周加一圈障碍。

对于迷宫中任一位置,均可约定有东、南、西、北四个方向可通。

3哈夫曼编/译码器

[问题描述]

利用哈夫曼编码进行信息通讯可以大大提高信道利用率,缩短信息传输时间,降低传输成本。

但是,这要求在发送端通过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。

对于双工信道(即可以双向传输信息的信道),每端都需要一个完整的编/译码系统。

试为这样的信息收发站写一个哈夫曼码的编译码系统。

[基本要求]

一个完整的系统应具有以下功能:

(l)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:

打印哈夫曼树(Treeprinting)。

将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。

[实现提示]

可以根据题目要求把程序划成5个模块,设计成菜单方式,每次执行一个模块后返回菜单。

除了初始化(I)过程外,在每次执行时都经过一次读取磁盘文件数据。

这是因为如果在程序执行后一直没有进行初始化(I)过程,为了能使后面的操作顺利进行,可以通过读取旧的数据来进行工作。

比如:

如果程序的工作需要的字符集和权值数据是固定的,只要在安装程序时进行一次初始(I)化操作就可以了。

再次运行程序时,不管进行哪项操作都可以把需要的数据读入到内存。

[算法分析]

本程序主要用到了三个算法。

(1)哈夫曼编码

在初始化(I)的过程中间,要用输入的字符和权值建立哈夫曼树并求得哈夫曼编码。

先将输入的字符和权值存放到一个结构体数组中,建立哈夫曼树,将计算所得的哈夫曼编码存储到另一个结构体数组中。

(2)串的匹配

在编码(D)的过程中间,要对已经编码过的代码译码,可利用循环,将代码中的与哈夫曼编码的长度相同的串与这个哈夫曼编码比较,如果相等就回显并存入文件。

(3)二叉树的遍历

在打印哈夫曼树(T)的过程中,因为哈夫曼树也是二叉树,所以就要利用二叉树的先序遍历将哈夫曼树输出。

[测试数据]

根据实验要求,在tobetrans.dat中输入"THISPROGRAMISMYFAVORITE",字符集和其频度如表1所示。

表1字符集频度表

字符

__

A

B

C

D

E

F

G

H

I

J

K

L

M

频度

186

64

23

22

32

103

21

15

47

57

1

5

32

20

字符

N

O

P

Q

R

S

T

U

V

W

X

Y

Z

频度

20

56

19

2

50

51

55

30

10

11

2

21

2

4教学计划编制问题

[问题描述]

大学的每个专业都要制定教学计划。

假设任何专业都有固定的学习年限,每学年含两学期,每学期的时间长度和学分上限值均相等。

每个专业开设的课程都是确定的,而且课程在开设时间的安排必须满足先修关系。

每门课程有哪些先修课程是确定的,可以有任意多门,也可以没有。

每门课恰好占一个学期。

试在这样的前提下设计一个教学计划编制程序。

[基本要求]

(1)输入参数包括:

学期总数,一学期的学分上限,每门课的课程号(固定占3位的字母数字串)、学分和直接先修课的课程号。

(2)允许用户指定下列两种编排策略之一:

一是使学生在各学期中的学习负担尽量均匀;二是使课程尽可能地集中在前几个学期中。

(3)若根据给定的条件问题无解,则报告适当的信息;否则将教学计划输出到用户指定的文件中。

计划的表格格式自行设计。

[测试数据]

学期总数:

6;学分上限:

10;该专业共开设12门课,课程号从C01到C12,学分顺序为2,3,4,3,2,3,4,4,7,5,2,3。

先修关系见图1。

[实现提示]

可设学期总数不超过12,课程总数不超过100。

如果输入的先修课程号不在该专业开设的课程序列中,则作为错误处理。

应建立内部课程号与课程号之间的对应关系。

图1课程先修关系

5成绩分析问题

[问题描述]

录入、保存一个班级学生多门课程的成绩,并对成绩进行分析。

[基本要求]

(1)通过键盘输入各学生的多门课程的成绩,建立相应的文件input.dat。

(2)对文件input.dat中的数据进行处理,要求具有如下功能:

1)按各门课程成绩排序,并生成相应的文件输出。

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

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

4)根据姓名或学号查询某人的各门课成绩,重名情况也能处理。

(3)界面美观。

[测试数据]

测试数据如表2所示。

表2成绩表

学号

姓名

数学

英语

计算机

001

王放

78

77

90

002

张强

89

67

88

003

李浩

56

66

78

004

黄鹂兵

89

86

85

005

李浩

67

88

76

006

陈利风

45

54

67

007

尚晓

78

76

70

6二叉排序树与平衡二叉树的实现

[问题描述]

分别采用二叉链表和顺序表作存储结构,实现对二叉排序树与平衡二叉树的操作。

[基本要求]

(1)用二叉链表作存储结构:

1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;

2)对二叉排序树T作中序遍历,输出结果;

3)计算二叉排序树T查找成功的平均查找长度,输出结果;

4)输入元素x,查找二叉排序树T,若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;

5)用数列L,生成平衡的二叉排序树BT:

当插入新元素之后,发现当前的二叉排序树BT不是平衡的二叉排序树,则立即将它转换成新的平衡的二叉排序树BT;

6)计算平衡的二叉排序树BT的平均查找长度,输出结果。

(2)用顺序表(一维数组)作存储结构:

1)以回车('\n')为输入结束标志,输入数列L,生成一棵二叉排序树T;

2)对二叉排序树T作中序遍历,输出结果;

3)计算二叉排序树T查找成功的平均查找长度,输出结果;

4)输入元素x,查找二叉排序树T:

若存在含x的结点,则删除该结点,并作中序遍历(执行操作2);否则输出信息“无x”;

7图的基本操作与实现

[问题描述]

自选存储结构,实现对图的操作。

[基本要求]

(1)自选存储结构,输入含n个顶点(用字符表示顶点)和e条边的图G;

(2)求每个顶点的度,输出结果;

(3)指定任意顶点x为初始顶点,对图G作DFS遍历,输出DFS顶点序列(提示:

使用一个栈实现DFS);

(4)指定任意顶点x为初始顶点,对图G作BFS遍历,输出BFS顶点序列(提示:

使用一个队列实现BFS);

(5)输入顶点x,查找图G:

若存在含x的顶点,则删除该结点及与之相关联的边,并作DFS遍历(执行操作3);否则输出信息“无x”;

(6)判断图G是否是连通图,输出信息“YES”/“NO”;

(7)如果选用的存储结构是邻接矩阵,则用邻接矩阵的信息生成图G的邻接表,即复制图G,然后再执行操作

(2);反之亦然。

*(8)自选图的其它任一种操作实现之。

8全国交通咨询模拟

[问题描述]

处于不同目的的旅客对交通工具有不同的要求。

例如,因公出差的旅客希望在旅途中的时间尽可能的短,出门旅游的游客则期望旅费尽可能省,而老年旅客则要求中转次数最少。

编制一个全国城市间的交通咨询程序,为旅客提供两种或三种最优决策的交通咨询。

[设计要求]

(1)提供对城市信息进行编辑(如:

添加或删除)的功能。

(2)城市之间有两种交通工具:

火车和飞机。

提供对列车时刻表和飞机航班进行编辑(增设或删除)的功能。

(3)提供两种最优决策:

最快到达和最省钱到达。

全程只考虑一种交通工具。

(4)旅途中耗费的总时间应该包括中转站的等候时间。

(5)咨询以用户和计算机的对话方式进行。

由用户输入起始站、终点站、最优决策原则和交通工具,输出信息:

最快需要多长时间才能到达或者最少需要多少旅费才能到达,并详细说明依次于何时乘坐哪一趟列车或哪一次班机到何地。

[实现提示]

(1)对全国城市交通图和列车时刻表及飞机航班表进行编辑,应该提供文件形式输入和键盘输入两种方式。

飞机航班表的信息应包括:

起始站的出发时间、终点站的到达时间和票价;列车时刻表则需根据交通图给出各个路段的详细信息,例如:

对从北京到上海的火车,需给出北京至天津、天津至徐州及徐州至上海各段的出发时间、到达时间及票价等信息。

(2)以邻接表作交通图的存储结构,表示边的结构内除含有邻接点的信息外,还应包括交通工具、路程中耗费的时间和花费以及出发和到达的时间等多种属性。

(3)增加旅途中转次数最少的最优决策。

9内部排序算法的性能分析

[问题描述]

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

[基本要求]

(1)对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较;

(2)待排序表的表长不小于100,表中数据随机产生,至少用5组不同数据作比较,比较指标有:

关键字参加比较次数和关键字的移动次数(关键字交换记为3次移动);

(3)输出比较结果。

[选做内容]

(1)对不同表长进行比较;

(2)验证各算法的稳定性;

(3)输出界面的优化。

10背包问题的求解

[问题描述]

假设有一个能装入总体积为T的背包和n件体积分别为w1,w2,…,wn的物品,能否从n件物品中挑选若干件恰好装满背包,即使w1+w2+…+wn=T,要求找出所有满足上述条件的解。

例如:

当T=10,各件物品的体积{1,8,4,3,5,2}时,可找到下列4组解:

(1,4,3,2),(1,4,5),(8,2),(3,5,2)。

[实现提示]

可利用回溯法的设计思想来解决背包问题。

首先将物品排成一列,然后顺序选取物品装入背包,假设已选取了前i件物品之后背包还没有装满,则继续选取第i+1件物品,若该件物品"太大"不能装入,则弃之而继续选取下一件,直至背包装满为止。

但如果在剩余的物品中找不到合适的物品以填满背包,则说明"刚刚"装入背包的那件物品“不合适”,应将它取出“弃之一边”,继续再从“它之后”的物品中选取,如此重复,直至求得满足条件的解,或者无解。

由于回溯求解的规则是"后进先出"因此自然要用到栈。

11简单个人书管理系统的设计与实现

[问题分析]

学生在自己的学习和生活中会拥有很多的书籍,对所购买的书籍进行分类和统计是一种良好的习惯。

可以便于对这些知识资料的整理和查询使用。

如果用文件来存储相关书籍的各种信息,包括分类、购买日期、价格、简介等等,辅之以程序来使用这些文件对里面的书籍信息进行统计和查询的工作将使这种书籍管理工作变得轻松而有趣。

简单个人书籍管理系统的开发就是为了解决这个实际问题的。

这个系统具备如下的功能:

(1)存储书籍各种相关信息。

(2)提供查找功能,按照多种关键字查找需要的书籍,查找成功后可以修改记录的相关项。

(3)提供排序功能,按照多种关键字对所有的书籍进行排序,例如按照价格进行排序。

(4)其他辅助的维护工作。

12简易电子表格的设计

[问题描述]设计一个支持基本计算统计功能和其他一些表格管理/处理功能的计算机软件,使用户可在该软件的支持下,用交互方式进行表格建立、数据输入、数据编辑及其他一些表格操作。

[基本要求]

(1)建立表格:

建立空白表格,同时在屏幕上显示,使其处于可输入数据状态。

(2)输入数据与编辑数据:

通过键盘将数据输入到显示在屏幕上的电子表格上,同时要支持基本的数据输入编辑。

(3)基本统计计算:

统计计算的种类包括:

合计、求平均、求最大/小统计计算方式;表格按行/列统计计算;表格按块统计计算。

 

(4)排序:

使任一行/列中的数据按大小(升或降)排列,对字符串型数据,还要可选大小写敏感。

 

(5)表格保存:

使电子表格存储在磁盘上(磁盘文件),并可随时读入,供继续处理。

 

(6)数据复制:

将表格中任一块数据,复制到另一块中。

复制到目标块时,对目标块中原内容,可选择下列几种处理方式:

代替、相加、相减、按条件替换。

(7)公式支持:

单元格内可输入公式(表达式),使对应单元格的最终内容为公式的计算结果。

公式最基本的形式是算术计算公式。

公式中可以按名引用其他单元格。

13停车厂模拟管理程序的设计与实现

[问题描述]

设停车厂只有一个可停放几辆汽车的狭长通道,且只有—个大门可供汽车进出。

汽车在停车场内按车辆到达的先后顺序依次排列,若车场内已停满几辆汽车,则后来的汽车只能在门外的便道上等候,一旦停车场内有车开走,则排在便道上的第一辆车即可进入;当停车场内某辆车要离开时,由于停车场是狭长的通道,在它之后开入的车辆必须先退出车场为它让路,待该车辆开出大门,为它让路的车辆再按原次序进入车场。

在这里假设汽车不能从便道上开走,试设计这样一个停车厂模拟管理程序。

14农夫过河问题的求解

[问题描述]

一个农夫带着—只狼、一只羊和—棵白菜,身处河的南岸。

他要把这些东西全部运到北岸。

他面前只有一条小船,船只能容下他和—件物品,另外只有农夫才能撑船。

如果农夫在场,则狼不能吃羊,羊不能吃白菜,否则狼会吃羊,羊会吃白菜,所以农夫不能留下羊和白菜自己离开,也不能留下狼和羊自己离开,而狼不吃白菜。

请求出农夫将所有的东西运过河的方案。

[数据结构设计]

求解这个问题的简单方法是—步—步进行试探,每—步搜索所有可能的选择,对前一步合适的选择再考虑下一步的各种方案。

要模拟农夫过河问题,首先需要对问题中每个角色的位置进行描述。

一个很方便的办法是用4位二进制数顺序分别表示农夫、狼、白菜和羊的位置。

用0表示农夫或者某东西在河的南岸,1表示在河的北岸。

例如整数5(其二制表示为0101)表示农夫和白菜在河的南岸,而狼和羊在北岸。

现在问题变成:

从初的状态二进制0000(全部在河的南岸)出发,寻找一种全部由安全状态构成的状态序列,它以二进制1111(全部到达河的北岸)为最终目标,并且在序列中的每一个状态都可以从前一状态到达。

为避免瞎费功夫,要求在序列中不出现重复的状态。

实现上述求解的搜索过程可以采用两种不同的策略:

一种广度优先搜索,另一种深度优先搜索。

这里介绍在广度优先搜索方法中采用的数据结构设计。

广度优先就是在搜索过程中总是首先搜索下面一步的所有可能状态,再进一步考虑更后面的各种情况。

要实现广度优先搜索,可以使用队列。

把下一步所有可能的状态都列举出来,放在队列中,再顺序取出来分别进行处理,处理过程中把再下一步的状态放在队列里……,由于队列的操作遵循先进先出的原则,在这个处理过程中,只有在前一步的所有情况都处理完后,才能开始后面一步各种情况的处理。

这样,具体算法中就需要用一个整数队列moveTo,它的每个元素表示—个可以安全到达的中间状态。

另外还需要一个数据结构记录已被访问过的各个状态,以及己被发现的能够到达当前这个状态的路径。

由于在这个问题的解决过程中需要列举的所有状态(二进制0000到1111)一共16种,所以可以构造一个包含16个元素的整数顺序表来实现。

顺序表的第i个元素记录状态i是否已被访问过,若已被访问过则在这个顺序表元素中记入前驱状态值,把这个顺序表叫做route。

route的每个分量初始值为-1。

route的一个元素具有非负值表示这个状态已访问过,或是正被考虑。

最后可以利用route顺序表元素的值建立起正确的状态路径。

于是得到农夫过河问题的广度优先算法。

在具体应用时,采用链队和顺序队均可,为叙述的方便,不妨设为使用顺序队。

[功能(函数)设计]

(1)确定农夫、狼、羊和白菜位置的功能模块。

用整数locate表示上—述4位二进制描述的状态,由于采用4位二进制的形式表示农夫、狼、白菜和羊,所以要使用位操作的“与”操作来考察每个角色所在位置的代码是0还是1。

函数返回值为真表示所考察的角色在河的北岸,否则在北岸。

例如某个状态和1000做“与”操作后所得结果为0,则说明农夫的位置上的二进制数为0,即农夫在南岸,如果所得结果为1,则说明农夫的位置上的二进制数为1,即农夫在北岸。

狼、羊和白菜的处理办法以此类推。

(2)确定安全状态的功能模块。

此功能模块通过位置分布的代码来判断当前状态是否安全。

若状态安全返回1,状态不安全返回0。

(3)将各个安全状态还原成友好的提示信息的功能模块。

由于程序中route表中最终存放的是整型的数据,如果原样输出不利于最终用户理解问题的解决方案,所以要把各个整数按照4位二进制的各个位置上的0、1代码所表示的含义输出成容易理解的文字。

[界面设计]

如果能力和时间允许,可以使用动画设计将运送的过程演示出来。

—般情况下可以使用最终的状态表描述出来就可以了。

[运行与测试]

使用状态表,程序应在屏幕上得到如表3所示的结果。

表3测试结果

步骤

状态

南岸

北岸

0

农夫狼羊白菜

1

狼白菜

农夫羊

2

农夫白菜羊

3

农夫狼羊

白菜

4

农夫狼白菜

5

农夫羊

狼白菜

6

农夫狼羊白菜

15电话号码查询系统

[问题描述]

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

[基本要求]

(1)设每个记录有下列数据项:

电话号码、用户名、地址;

(2)从键盘输入各记录,分别以电话号码和用户名为关键字建立散列表;

(3)采用一定的方法解决冲突;

(4)查找并显示给定电话号码的记录;

(5)查找并显示给定用户名的记录。

整个系统必须满足系统功能要求;设计不同的散列函数,比较冲突率;在散列函数确定的前提下,尝试各种不同类型处理冲突的方法,考察平均查找长度的变化。

16航班订票系统

(1)可以录入航班信息:

要求数据存储在一个数据文件中,其数据构成以及具体的数据信息自定。

(2)可以查询某条航线的情况:

例如,输入航班号,查询起降时间,起飞抵达城市,航班票价,票价折扣,确定航班是否满仓。

(3)可以输入起飞抵达城市,查询飞机航班情况

(4)可以订票。

如果该航班已经无票,可以提供相关可选择航班。

(5)可以退票。

退票后修改相关数据文件。

(6)客户资料包括:

姓名,证件号,订票数量及航班情况,订单要有编号。

(7)修改航班信息:

当航班信息改变时,可以修改航班数据文件

17哈夫曼编码的实现

(1)打开若干篇英文文章,统计该文章中每个字符出现的次数,进一步统一各字符出现的概率。

(2)针对上述统计结果,对各字符实

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 工作计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1