数据结构课设.docx
- 文档编号:12048954
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:16
- 大小:44.37KB
数据结构课设.docx
《数据结构课设.docx》由会员分享,可在线阅读,更多相关《数据结构课设.docx(16页珍藏版)》请在冰豆网上搜索。
数据结构课设
《数据结构课程设计》任务书
班级:
计科10901-10905
课程设计题目:
图的基本操作及应用
数据结构课程设计是在学完数据结构课程之后的实践教学环节。
该实践教学是软件设计的综合训练,包括问题分析、总体结构设计、用户界面设计、程序设计基本技能和技巧。
要求学生在设计中逐步提高程序设计能力,培养科学的软件工作方法。
一.设计目的
1.能根据实际问题的具体情况,结合数据结构课程中的基本理论和基本算法,分析并正确确定数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
2.提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3.初步掌握软件开发过程中问题分析、系统设计、程序编码、测试等基本方法和技能。
4.训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。
5.培养根据选题需要选择学习书籍,查阅文献资料的自学能力。
二.设计任务
设计一个基于DOS菜单的应用程序。
要利用多级菜单实现各种功能。
内容如下:
1.无向图的基本操作及应用
1创建无向图的邻接矩阵
2创建无向图的邻接表
3无向图的深度优先遍历
4无向图的广度优先遍历
2.无向网的基本操作及应用
1创建无向网的邻接矩阵
2创建无向网的邻接表
3求最小生成树
3.有向图的基本操作及应用
1创建有向图的邻接矩阵
2创建有向图的邻接表
3拓扑排序
4.有向网的基本操作及应用
1创建有向网的邻接矩阵
2创建有向网的邻接表
3关键路径
4单源最短路径
5每对顶点之间的最短路径
三.设计指导
第一步:
根据设计任务,设计DOS菜单。
例如
选择1之后应该类似于
第二步:
设计菜单
voidShowMainMenu()
{
cout<<"\n";
cout<<"***************图的基本操作及应用******************\n";
cout<<"*1无向图的基本操作及应用*\n";
cout<<"*2无向网的基本操作及应用*\n";
cout<<"*3有向图的基本操作及应用*\n";
cout<<"*4有向网的基本操作及应用*\n";
cout<<"*5退出*\n";
cout<<"***************************************************\n";
}
voidUDG()
{
MGraphMG;
ALGraphALG;
intn;
do
{
cout<<"\n";
cout<<"***************无向图的基本操作及应用***************\n";
cout<<"*1创建无向图的邻接矩阵*\n";
cout<<"*2创建无向图的邻接表*\n";
cout<<"*3无向图的深度优先遍历*\n";
cout<<"*4无向图的广度优先遍历*\n";
cout<<"*5退出*\n";
cout<<"****************************************************\n";
cin>>n;
switch(n){
case1:
CreatUDG_M(MG);
break;
case2:
CreatUDG_ALG(ALG);
dispgraph(ALG);
break;
case3:
break;
case4:
break;
default:
if(n!
=5)
cout<<"错误,重新输入\n";
}
}while(n!
=5);
}
voidUDN()
{
MGraphMN;
ALGraphALN;
intn;
do{
cout<<"\n";
cout<<"***************无向网的基本操作及应用***************\n";
cout<<"*1创建无向网的邻接矩阵*\n";
cout<<"*2创建无向网的邻接表*\n";
cout<<"*3prim算法求最小生成树*\n";
cout<<"*4kraskal算法求最小生成树*\n";
cout<<"*5退出*\n";
cout<<"****************************************************\n";
cin>>n;
switch(n){
case1:
CreatUDN_M(MN);
break;
case2:
CreatUDN_ALG(ALN);
dispgraph_N(ALN);
break;
case3:
break;
case4:
break;
default:
if(n!
=5)
cout<<"错误,重新输入\n";
}
}while(n!
=5);
}
voidDG()
{
intn;
do
{
cout<<"\n";
cout<<"***************有向图的基本操作及应用***************\n";
cout<<"*1创建有向图的邻接矩阵*\n";
cout<<"*2创建有向图的邻接表*\n";
cout<<"*3拓扑排序*\n";
cout<<"*4退出*\n";
cout<<"****************************************************\n";
cin>>n;
switch(n){
case1:
break;
case2:
break;
case3:
break;
default:
if(n!
=4)
cout<<"错误,重新输入\n";
}
}while(n!
=4);
}
voidDN()
{
intn;
do{
cout<<"\n";
cout<<"***************有向网的基本操作及应用***************\n";
cout<<"*1创建有向网的邻接矩阵*\n";
cout<<"*2创建有向网的邻接表*\n";
cout<<"*3关键路径*\n";
cout<<"*4单源顶点最短路径问题*\n";
cout<<"*5每对顶点间最短路径问题*\n";
cout<<"*6退出*\n";
cout<<"****************************************************\n";
cin>>n;
switch(n){
case1:
break;
case2:
break;
case3:
break;
case4:
break;
case5:
break;
default:
if(n!
=6)
cout<<"错误,重新输入\n";
}
}while(n!
=6);
}
voidmain()
{
intn;
do{
ShowMainMenu();
cin>>n;
switch(n){
case1:
UDG();
break;
case2:
UDN();
break;
case3:
DG();
break;
case4:
DN();
break;
default:
if(n!
=5)
cout<<"错误,重新输入\n";
}
}while(n!
=5);
}
无论多少级菜单,都可以用这种模式实现,并且当前菜单不用担心前面的问题,只需编写当前的功能函数。
第三步:
添加功能函数。
对于使用类来做的同学,根据实际使用,我们知道菜单类的主要功能就是显示菜单项与响应用户选项。
所以我们可以这样设计一个菜单基类:
classCMenuBase
{
public:
CMenuBase(void);
~CMenuBase(void);
virtualvoidShowMenu()=0;
virtualvoidEvent(intEvenID)=0;
protected:
CMenuBase*m_pParent;
};
在此基础上,所有菜单类都继承这个类,以此来实现“显示”与“响应事件”的多态性。
例如,主菜单类的设计为:
classCMainMenu:
publicCMenuBase
{
public:
CMainMenu(void);
~CMainMenu(void);
virtualvoidShowMenu();
virtualvoidEvent(intEvenID);
};
和基类基本没有区别。
其实现可能为
voidCMainMenu:
:
ShowMenu(){
cout<<"\n**************《数据结构课程设计》*****************\n";
cout<<"*1线性表2栈与队列3串、数组和广义表*\n";
cout<<"*4树5图6查找*\n";
cout<<"*7排序8退出*\n";
cout<<"***************************************************\n";
}
voidCMainMenu:
:
Event(intEvenID){
CMenuBase*tmp;
switch(EvenID){
caseID_LIST:
break;
caseID_STACK_QUEUE:
SUBMENU(CStackAndQueueMenu)
break;
//…………………
caseID_EXIT:
MAIN_EXIT=true;
break;
default:
InvalidateAction();
break;
}
}
注意:
这里的关键是如何进入子菜单,我们用了一个宏命令,例如SUBMENU(CListMenu),其定义为:
#defineSUBMENU(submenu)tmp=pBase;\
pBase=newsubmenu(tmp);\
pBase->ShowMenu();
通过构造函数,将当前菜单对象作为子菜单的父菜单,以后推出子菜单时,子菜单将将显示权让给其父菜单:
#defineEXIT_SUBMENUtmp=m_pParent;\
deletepBase;\
pBase=tmp;\
pBase->ShowMenu();
这样设计,无论有多少级菜单,其编程风格都是一样的,只需管理当前的菜单交接,而无需知道它是从哪儿来的。
四.成绩评定
实习报告(文字不得少于4000字)
1.课程设计目的;
2.设计任务及要求;
3.需求分析;
4.详细设计(实现过程);
5.课程设计小结(难点、收获、存在不足、改进);
程序实现
a)完成基本结构图,程序中有三级菜单,完成基本操作者及格;
b)在第一条的基础上,任务完成的越多,成绩等级越高。
c)使用面向对象实现的可以适当加分。
成绩由三部分组成:
平时考核(20%)、程序实现(50%)、实习报告(30%)
申请不在机房做的同学:
平时成绩就加入到程序实现里面也就是程序实现70%
《数据结构课程设计》安排表
时间:
11年6月13日~11年6月25日班级:
计科院09级
地点:
4号楼2号机房人数:
170
上机学时:
40学时
17周
周一
周二
周三
周四
周五
上午
10901-2
陈勇
包小军
10903-5
周云才
冯伟
刘兆良
10901-2
陈勇
包小军
10903-5
周云才
冯伟
刘兆良
10901-2
陈勇
包小军
下午
10903-5
周云才
冯伟
刘兆良
10901-2
陈勇
包小军
10901-2
陈勇
包小军
10903-5
周云才
冯伟
刘兆良
晚上
10903-5
周云才
冯伟
刘兆良
18周
周一
周二
周三
周四
周五
上午
10903-5
周云才
冯伟
刘兆良
10901-2
陈勇
包小军
10903-5
周云才
冯伟
刘兆良
10901-2
陈勇
包小军
10903-5
周云才
冯伟
刘兆良
下午
10901-2
陈勇
包小军
10903-5
周云才
冯伟
刘兆良
10903-5
周云才
冯伟
刘兆良
10901-2
陈勇
包小军
晚上
10901-2
陈勇
包小军
说明:
每一个班安排1名指导教师,负责布置任务、指导编程及编写报告、指导学生熟悉开发环境和辅导学生调试程序,并对学生进行考勤。
最后对学生完成的系统进行现场验收和评定成绩。
计科10901陈勇
计科10902包小军
计科10903冯伟
计科10904周云才
计科10905刘兆良
数据结构课程设计报告
系(院):
计算机科学学院
专业班级:
姓名:
学号:
指导教师:
设计时间:
2011.6.13-2011.6.25
设计地点:
4#2号机房
(此处目录根据自己情况可以调整改动)
一、课程设计目的3
二、设计任务及要求3
三、需求分析4
四、总体设计4
五、详细设计与实现[含代码和实现界面]7
六、课程设计小结
(最后一页要加上下面的格式)
指导老师意见:
成绩:
教师签名:
年月日
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构