数据结构实训报告.docx
- 文档编号:17843953
- 上传时间:2023-08-04
- 格式:DOCX
- 页数:41
- 大小:176.16KB
数据结构实训报告.docx
《数据结构实训报告.docx》由会员分享,可在线阅读,更多相关《数据结构实训报告.docx(41页珍藏版)》请在冰点文库上搜索。
数据结构实训报告
实训报告
实训题目:
校园导游程序
学院:
计算机科学与技术学院
专业:
软件工程
班级:
2012级
学号:
1208060220
学生姓名:
熊齐超
指导教师:
张丽
2014年7月10日
一、实训目的及要求
数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:
其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。
本综合实训利用VisualStudio2008集成编程环境为实践工具,通过上机实践培养学生分析具体问题、解决实际问题的能力,训练和培养学生的数据抽象能力和程序设计的能力。
数据结构是一门实践性较强的课程,以培养学生的数据抽象能力和程序设计的能力为目的。
在实训时应注重培养学生的实际操作能力。
本综合实训安排了18学时的实验课时,具体要求如下:
1.学习和理解每个实训题目的基本理论和方法;
2.掌握每个实验的实现步骤和关键技术;
3.准备好实验所需要的资源和文档;
4.上机实现程序,得到通过调试的正确程序;
5.根据每个实验的不同要求,完成实验报告的word文档。
2、实训环境
WindowsXP
VisualStudio2010
3、实训内容
1)问题描述
用无向网表示你所在学校的校园景点平面图,图中顶点表示主要景点,存放景点的编号、名称、简介等信息,图中的边表示景点间的道路,存放路径长度等信息。
要求能够回答有关景点介绍、游览路径等问题。
2)基本要求
(1)查询各景点的相关信息;
(2)查询图中任意两个景点间的最短路径。
(3)能够将图的信息保存到文件中,并指定文件打开。
(4)增加、删除、更新有关景点和道路的信息。
附加难度:
有余力的同学可以考虑用图形界面实现寻址的过程
3)设计思想
核心数据结构定义一个图,将图保存后,对图进行面向指定节点到各个节点的最短路径的操作。
可以再文件中保存多个导游图,例如保存学校图、芜湖市图等文件。
开始时选择文件,将指定文件中的信息导入到内存的图中。
四、算法描述及实训步骤
本项目要实现七个主要功能:
学校景点介绍、查看浏览路线、查询景点间最短路径、景点信息查询、更改图信息、查询景点间可行路径、打印邻接矩阵。
附加一些其他功能
贵州大学校园导游系统:
五、总结及心得体会
每一次课程设计,都有不一样的感受,通过课程设计,对我而言,得到的不仅仅是知识,更是获得知识的方法,这显得更加的重要。
本次课程设计,我的设计题目是校园导游程序,本程序主要用到的是课本中图的知识,以校园中的景点作为顶点,以景点间的路径作为边,就构成了图。
我用到的时临界表存储结构,这样对空间的浪费不至于很大。
主要完成的功能是最短路径和所有路径的算法,最短路径用的是书上的Dijkstra算法,原来我对这个算法的只是出于一个对大致的过程知道的程度,课程设计之后,我对该算法可以说是很熟悉了,不管是算法思想还是代码。
另一个主要功能是求两个景点间的所有路径,这个算法书上没有提到,我一步步的摸索,用了一个递归的思想,再经过不断的修改,一次次的单步运行,通过查看相应变量的变化情况,将此算法实现的。
最后完成整个程序。
课程设计,本人感觉对于写程序,首先要要的是思想,即完成每个功能需要的算法思想,在想好思想后,就要具体到代码,计算机能够识别的代码,代码写好后,大多情况下是有错误的,首先要排除语法错误,然后时语义错误,在排错的过程中,我用到的最多的是单步运行,感觉单步运行这种方式很管用,通过一步步的运行,通过每一步的运行,观察其中变量的变化情况,可以很容易的知道代码是哪一步出了错误,这样对排错有很大的帮助。
在课程设计的过程中,曾遇到过很多的问题,如对路径字符串的处理,整个递归一步步的往下调用和返回过程,还有很多细节的问题。
在遇到问题时,首先想到的是自己思考,分析过程,查找资料,上网XX,通过自己的努力还没有解决时,这是首先需要问的是自己旁边的同学,和同学讨论,有时还争得面红耳赤,如果最后将此不下,就向老师提问。
这课程设计的过程中,我几乎所有的问题处理流程就是这个样子的。
我感觉这就是一种学习的方法,在学习中遇到难题时的学习方法,要把这种学习的方法变成一种习惯,这才是每次课程设计应达到的一种效果。
课程设计提供了这样一种学习的机会,可以随时随地向老师请教,和老师交流的一个机会,和同学互相讨论的机会。
课程设计教会了我,如何用计算机程序来处理现实中的实际问题。
将现实中的实际问题先转化为数学模型,然后将数学模型用程序解决的一种能力。
六、实训结果
(1)主界面
(2)学校景点介绍
(3)查看浏览路线
(4)查询景点间最短路径
(5)景点信息查询
(6)更改图的信息
(7)查询景点间可行路径
(8)打印邻接矩阵
七、源代码:
#defineInfinity1000
#defineMaxVertexNum35
#defineMAX40
#include
#include
#include
#include
#include
#include
typedefstructarcell//边的权值信息
{
intadj;//权值
}arcell,adjmatrix[MaxVertexNum][MaxVertexNum];//图的邻接矩阵类型
typedefstructvexsinfo//顶点信息
{
intposition;//景点的编号
charname[32];//景点的名称
charintroduction[256];//景点的介绍
}vexsinfo;
typedefstructmgraph//图结构信息
{
vexsinfovexs[MaxVertexNum];//顶点向量(数组)
adjmatrixarcs;//邻接矩阵
intvexnum,arcnum;//分别指定顶点数和边数
}mgraph;
//全局变量
intvisited[35];//用于标志是否已经访问过
intd[35];//用于存放权值或存储路径顶点编号
mgraphcampus;//图变量(大学校园)
//
(1)对图初始化
mgraphinitgraph()
{
inti=0,j=0;
mgraphc;
c.vexnum=28;//顶点个数
c.arcnum=39;//边的个数
for(i=0;i c.vexs[i].position=i; //依次输入顶点信息 strcpy(c.vexs[0].name,"正门: "); strcpy(c.vexs[0].introduction,"学校大门,离公交站很近""|r\n"); strcpy(c.vexs[1].name,"学校后门门: "); strcpy(c.vexs[1].introduction,"去往新区、学校班车进出口"); strcpy(c.vexs[2].name,"人文学院: "); strcpy(c.vexs[2].introduction,"人文学院办公楼的住处,楼高3层"); strcpy(c.vexs[3].name,"管理学院: "); strcpy(c.vexs[3].introduction,"MBA培训中心,楼高7层"); strcpy(c.vexs[4].name,"行政楼: "); strcpy(c.vexs[4].introduction,"行政办公大楼,楼高5层"); strcpy(c.vexs[5].name,"建设银行: "); strcpy(c.vexs[5].introduction,"学生取款处,楼高1层"); strcpy(c.vexs[6].name,"体育馆: "); strcpy(c.vexs[6].introduction,"室内各类球类运动"); strcpy(c.vexs[7].name,"外语学院: "); strcpy(c.vexs[7].introduction,"各种外语教学,楼高6层"); strcpy(c.vexs[8].name,"双馨园食堂: "); strcpy(c.vexs[8].introduction,"学生就餐地点"); strcpy(c.vexs[9].name,"博学楼: "); strcpy(c.vexs[9].introduction,"计算机科学与技术学院大楼,楼高13层"); strcpy(c.vexs[10].name,"学生宿舍: "); strcpy(c.vexs[10].introduction,"若干栋,离中山园食堂近"); strcpy(c.vexs[11].name,"中山园食堂: "); strcpy(c.vexs[11].introduction,"学生就餐处"); strcpy(c.vexs[12].name,"图书馆: "); strcpy(c.vexs[12].introduction,"历史悠久,文化气氛好"); strcpy(c.vexs[13].name,"法学楼: "); strcpy(c.vexs[13].introduction,"研修法学佳地"); strcpy(c.vexs[14].name,"贵大学生超市: "); strcpy(c.vexs[14].introduction,"买各种日用品的地方"); strcpy(c.vexs[15].name,"大礼堂: "); strcpy(c.vexs[15].introduction,"文艺演出所在地"); strcpy(c.vexs[16].name,"慎思楼(新图书馆): "); strcpy(c.vexs[16].introduction,"自习的好地方"); strcpy(c.vexs[17].name,"逸夫楼: "); strcpy(c.vexs[17].introduction,"经济学院办公楼"); strcpy(c.vexs[18].name,"文化书院: "); strcpy(c.vexs[18].introduction,"推动东西方文化交流的重要桥梁"); strcpy(c.vexs[19].name,"派出所: "); strcpy(c.vexs[19].introduction,"保卫学校安全"); strcpy(c.vexs[20].name,"贵州大学出版社: "); strcpy(c.vexs[20].introduction,"发行各种图书"); strcpy(c.vexs[21].name,"贵州大学网球场: "); strcpy(c.vexs[21].introduction,"打网球的地方"); strcpy(c.vexs[22].name,"化工学院: "); strcpy(c.vexs[22].introduction,"各种实验的研究之地"); strcpy(c.vexs[23].name,"贵州大学高等教育研究所: "); strcpy(c.vexs[23].introduction,"关于高等教育的各种研究"); strcpy(c.vexs[24].name,"花溪海洋学校: "); strcpy(c.vexs[24].introduction,"贵大内部学校"); strcpy(c.vexs[25].name,"贵州大学党校: "); strcpy(c.vexs[25].introduction,"党员学习的地方"); strcpy(c.vexs[26].name,"校医院: "); strcpy(c.vexs[26].introduction,"看小病的地方"); strcpy(c.vexs[27].name,"体育场: "); strcpy(c.vexs[27].introduction,"田径远动地点"); //依次输入边上的权值信息 for(i=0;i for(j=0;j c.arcs[i][j].adj=Infinity;//先初始化图的邻接矩阵 //部分弧长 c.arcs[0][2].adj=50;c.arcs[0][3].adj=60; c.arcs[1][4].adj=90; c.arcs[2][3].adj=60;c.arcs[2][8].adj=40; c.arcs[3][4].adj=60;c.arcs[3][6].adj=40; c.arcs[4][5].adj=70;c.arcs[4][9].adj=70;c.arcs[4][10].adj=80;c.arcs[4][17].adj=200; c.arcs[5][7].adj=70; c.arcs[6][9].adj=40; c.arcs[7][18].adj=190; c.arcs[8][11].adj=50; c.arcs[9][12].adj=40; c.arcs[10][18].adj=70; c.arcs[11][12].adj=60;c.arcs[11][14].adj=50;c.arcs[11][15].adj=50; c.arcs[12][16].adj=50; c.arcs[13][14].adj=40;c.arcs[13][22].adj=60; c.arcs[14][15].adj=50;c.arcs[14][20].adj=90; c.arcs[15][16].adj=60;c.arcs[15][21].adj=40; c.arcs[16][17].adj=60; c.arcs[17][18].adj=80; c.arcs[18][19].adj=60; c.arcs[20][21].adj=60;c.arcs[20][24].adj=80; c.arcs[22][23].adj=60;c.arcs[22][25].adj=80; c.arcs[23][24].adj=60; c.arcs[24][26].adj=100;c.arcs[24][27].adj=100; c.arcs[25][26].adj=90; c.arcs[26][27].adj=90; for(i=0;i for(j=0;j c.arcs[j][i].adj=c.arcs[i][j].adj; FILE*pFile; pFile=fopen("myfile.txt","w"); fwrite(c.vexs[0].name,2,3,pFile); fwrite(c.vexs[0].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[1].name,2,6,pFile); fwrite(c.vexs[1].introduction,2,12,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[2].name,2,5,pFile); fwrite(c.vexs[2].introduction,2,15,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[3].name,2,5,pFile); fwrite(c.vexs[3].introduction,2,10,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[4].name,2,4,pFile); fwrite(c.vexs[4].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[5].name,2,5,pFile); fwrite(c.vexs[5].introduction,2,10,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[6].name,2,4,pFile); fwrite(c.vexs[6].introduction,2,8,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[7].name,2,5,pFile); fwrite(c.vexs[7].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[8].name,2,6,pFile); fwrite(c.vexs[8].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[9].name,2,4,pFile); fwrite(c.vexs[9].introduction,2,17,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[10].name,2,5,pFile); fwrite(c.vexs[10].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[11].name,2,6,pFile); fwrite(c.vexs[11].introduction,2,5,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[12].name,2,4,pFile); fwrite(c.vexs[12].introduction,2,10,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[13].name,2,4,pFile); fwrite(c.vexs[13].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[14].name,2,7,pFile); fwrite(c.vexs[14].introduction,2,9,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[15].name,2,4,pFile); fwrite(c.vexs[15].introduction,2,7,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[16].name,2,10,pFile); fwrite(c.vexs[16].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[17].name,2,4,pFile); fwrite(c.vexs[17].introduction,2,7,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[18].name,2,5,pFile); fwrite(c.vexs[18].introduction,2,14,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[19].name,2,4,pFile); fwrite(c.vexs[19].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[20].name,2,8,pFile); fwrite(c.vexs[20].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[21].name,2,8,pFile); fwrite(c.vexs[21].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[22].name,2,5,pFile); fwrite(c.vexs[22].introduction,2,9,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[23].name,2,12,pFile); fwrite(c.vexs[23].introduction,2,11,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[24].name,2,7,pFile); fwrite(c.vexs[24].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[25].name,2,7,pFile); fwrite(c.vexs[25].introduction,2,7,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[26].name,2,4,pFile); fwrite(c.vexs[26].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fwrite(c.vexs[27].name,2,4,pFile); fwrite(c.vexs[27].introduction,2,6,pFile); fwrite("\r\n",2,1,pFile); fclose(pFile); returnc; }//initgraph // (2)查找景点在图中的序号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告