数据结构课程设计题目-12级

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

成品应包括以下内容:
1、程序设计书(Word格式)。

包括程序设计目标、问题描述、需求分析、概要设计、详细设计、源程序清单(要求格式整齐400行以上,要有注释说明)、软件说明书(给出软件如何使用,使用时的注意事项)、测试报告(每个函数的功能测试,输入条件,输出结果)和课程设计总结。

2、可执行程序源代码。

题目一:仓库管理系统(线性表应用)
[问题描述]
建立一个仓库管理程序,可以按顺序和货物名称查询仓库存储情况,也可以增加或删除货物以及建立新的仓库存储系统。

[实现提示]
可以采用双向链表的存储结构,如可定义如下的存储结构:
typedef struct dnode /*定义双向链表结构体*/
{int number; /*货物编号*/
char name[max]; /*货物名称*/
int counter; /*货物数量*/
struct dnode *prior,*next; /*定义两指针,分别指向其前驱和后继*/
}dlnode;
题目二:单位员工通讯录管理系统(线性表应用)
[问题描述]
为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话、手机号、及电子邮箱。

其功能包括通讯录链表的建立、员工通讯信息的查询、修改、插入与删除、以及整个通讯录表的输出。

[实现提示]
可以采用单链表的存储结构,如可定义如下的存储结构:
typedef struct { /*员工通讯信息的结构类型定义*/
char num[5]; /*员工编号*/
char name[10]; /*员工姓名*/
char phone[15]; /*办公室电话号码*/
char call[15]; /*手机号码*/
}DataType;
/*通讯录单链表的结点类型*/
typedef struct node
{ DataType data; /*结点的数据域*/
struct node *next; /*结点的指针域*/
}ListNode,*LinkList;
题目三: 哈夫曼编码/译码系统(树应用)
[问题描述]
利用哈夫曼编码进行通信,可以压缩通信的数据量,提高传输效率,缩短信息的传输时间,还有一定的保密性。

现在要求编写一程序模拟传输过程,实现在发送前将要发送的字符信息进行编码,然后进行发送,接收后将传来的数据进行译码,即将信息还原成发送前的字符信息。

[实现提示]
在本例中设置发送者和接受者两个功能,
发送者的功能包括:
①输入待传送的字符信息;
②统计字符信息中出现的字符种类数和各字符出现的次数(频率);
②根据字符的种类数和各自出现的次数建立哈夫曼树;
③利用以上哈夫曼树求出各字符的哈夫曼编码;
④将字符信息转换成对应的编码信息进行传送。

接受者的功能包括:
①接收发送者传送来的编码信息;
②利用上述哈夫曼树对编码信息进行翻译,即将编码信息还原成发送前的字符信息。

从以上分析可发现,在本例中的主要算法有三个:
(1)哈夫曼树的建立;
(2)哈夫曼编码的生成;
(3)对编码信息的翻译。

题目四:教学计划编制问题(图的应用)
[问题描述]
大学的每个专业都要制定教学计划。

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

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

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

每门课恰好占一个学期。

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

[实现提示]
1、输入参数应包括:学期总数,一学期的学分上限,每门课的课程号(可以是固定占
3位的字母数字串)、学分和直接先修课的课程号。

2、应允许用户指定下列两种编排策略之一:一是使学生在各学期中的学习负担尽量均
匀;二是使课程尽可能地集中在前几个学期中。

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

计划的表格格式可以自己设计。

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

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

题目五:图书管理系统(查找应用)
[问题描述]
图书管理基本业务活动包括:对一本书的采编入库、清除库存、借阅和归还等等。

试设计一个图书管理系统,将上述业务活动借助于计算机系统完成。

[实现提示]
1、每种书的登记内容至少包括书号、书名、著者、现存量和总库存量等五项。

2、由于图书管理的基本业务活动都是通过书号(即关键字)进行的,所以要用对书号
索引,以获得高效率。

3、系统应实现的基本功能有:
采编入库:新购入一种书,经分类和确定书号之后登记到图书帐目中去。

如果这两种书在帐中已有,则只将总库存量增加。

清除库存:某种书已无保留价值,将它从图书帐目中注销。

借阅:如果一种书的现存量大于零,则借出一本,登记借阅者的图书证号和归还期限。

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

显示:以凹入表的形式显示B树。

这个操作是为了调试和维护的目的而设置的。

题目六药店的药品销售统计系统(排序应用)【问题描述】
设计一系统,实现医药公司定期对销售各药品的记录进行统计,可按药品的编号、单价、销售量或销售额做出排名。

【实现提示】
在本设计中,首先从数据文件中读出各药品的信息记录,存储在顺序表中。

各药品的信息包括:药品编号、药名、药品单价、销出数量、销售额。

药品编号共4位,采用字母和数字混合编号,如:A125,前一位为大写字母,后三位为数字,按药品编号进行排序时,可采用基数排序法。

对各药品的单价、销售量或销售额进行排序时,可采用多种排序方法,如直接插入排序、冒泡排序、快速排序,直接选择排序等方法。

在本设计中,对单价的排序采用冒泡排序法,对销售量的排序采用快速排序法,对销售额的排序采用堆排序法。

药品信息的元素类型定义:
typedef struct node
{ char num[4]; /*药品编号*/
char name[10]; /*药品名称*/
float price; /*药品单价*/
int count; /*销售数量*/
float sale; /*本药品销售额*/
}DataType;
存储药品信息的顺序表的定义:
typedef struct
{ DataType r[MaxSize];
int length;
}SequenList;
题目七电视大赛观众投票及排名系统(排序应用)
【问题描述】
在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。

现在要求编写一程序模拟实现上述系统的功能。

【实现提示】
在本例中,首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来开辟存放选手信息的顺序表。

将选手的编号和姓名依此存入顺序表单元中,观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志。

投票结束后进行排序,在此采用希尔排序,然后为每个选手计算名次,得票相同的名次也相同,
(1)存储类型的定义
参赛选手信息存储类型的定义:
typedef struct node{
char name[8]; /*选手姓名*/
int num; /*选手编号*/
int score; /*选手得分*/
int tax; /*选手名次*/
}Node;
题目八一元多项式计算
【问题描述】
1.能够按照指数降序排列建立并输出多项式;
2.能够完成两个多项式的相加、相减,并将结果输入;
【任务要求】
1.存储结构;
2.多项式相加的基本过程的算法(可以使用程序流程图)
3.可以提出算法的改进方法;
【测试数据】
自行设定,注意边界等特殊情况。

题目九集合的交、并、差运算
【问题描述】
编制一个能演示执行集合的交、并和差运算的程序。

【任务要求】
1)集合元素用小写英文字母,执行各种操作应以对话方式执行。

2)算法要点:利用单链表表示集合;理解好三种运算的含
【测试数据】
自行设定,注意边界等特殊情况。

题目十最小生成树
【问题描述】
在n个城市之间建设网络,只需保证连通即可,求最经济的架设方法。

对于图,其生成树中的边也带权,将生成树各边的权值总和称为生成树的权,并将权值最小的生成树称为最小生成树(Minimun Spanning Tree),简称为MST。

有两种非常典型的算法:Prim算法和kruskal算法。

【任务要求】
设计程序完成如下功能:对给定的网和起点,用PRIM算法和kruskal算法的基本思想求解出所有的最小生成树。

存储结构可自行选择。

【测试数据】
自行设定,注意边界等特殊情况。

题目十一:算术表达式与二叉树
【问题描述】
一个表达式和一棵二叉树之间,存在着自然的对应关系。

写一个程序,实现基于二叉树表示的算术表达式的操作。

【任务要求】
假设算术表达式Expression内可以含有变量(a~z)、常量(0~9)和二元运算符(+,-,*,/,^(乘幂))。

实现以下操作:
1)ReadExpre(E)—以字符序列的形式输入语法正确的前缀表达式并构造表达式E。

2)WriteExpre(E)—用带括弧的中缀表达式输出表达式E。

3)Assign(V,c)—实现对变量V的赋值(V=c),变量的初值为0。

4)Value(E)—对算术表达式E求值。

5)CompoundExpr(P,E1,E2)--构造一个新的复合表达式(E1)P(E2)
【测试数据】
1)分别输入0;a;-91;+a*bc;+*5^x2*8x;+++*3^x3*2^x2x6并输出。

每当输入一个表达式后,对其中的变量赋值,然后对表达式求值。

题目十二:B-树与B+树及其操作
【问题描述】
学习并研究B-树与B+树,并编写演示它们操作的程序。

【任务要求】
1)B-树构建、查找、插入和删除操作程序。

2)B+树构建、查找、插入和删除操作程序。

【测试数据】
题目十三:求表达式的值
【问题描述】建立试题库文件,随机产生n个题目;题目涉及加减乘除,带括号的混合运算;比如一次给出10道题目,作为一轮练习。

每轮练习中,题目是一个一个给出的,每给出一个题目,要求学生输入答案;每当学生练习完一轮,要给出这一轮学生答对题的数目及答错的数目。

并询问是否继续下一轮。

【任务要求】
完成带括号的加减乘除混合运算的表达式的求值。

【测试数据】
为减小难度,表达式仅限于100以内的整数。

题目十四:树与二叉树的转换
【问题描述】给出一棵树,要求用孩子兄弟链接表实现树的存储,并将它转换为二叉树。

【任务要求】
(1)给出树的创建算法实现;
(2)给出树转换为二叉树的算法实现;
(3)以缩进方式给出二叉树的打印输出。

【测试数据】
树的数据以括号形式给出,如A(B(C(D)E)F(G(H)I),表示的树如下图所示。

相关文档
最新文档