数据结构课程设计报告含代码完整版.docx

上传人:b****8 文档编号:27722751 上传时间:2023-07-04 格式:DOCX 页数:18 大小:92.67KB
下载 相关 举报
数据结构课程设计报告含代码完整版.docx_第1页
第1页 / 共18页
数据结构课程设计报告含代码完整版.docx_第2页
第2页 / 共18页
数据结构课程设计报告含代码完整版.docx_第3页
第3页 / 共18页
数据结构课程设计报告含代码完整版.docx_第4页
第4页 / 共18页
数据结构课程设计报告含代码完整版.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

数据结构课程设计报告含代码完整版.docx

《数据结构课程设计报告含代码完整版.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告含代码完整版.docx(18页珍藏版)》请在冰豆网上搜索。

数据结构课程设计报告含代码完整版.docx

数据结构课程设计报告含代码完整版

HENsystemofficeroom【HEN16H-HENS2AHENS8Q8-HENH1688】

 

数据结构课程设计报告含代码

西安邮电学院

数据结构课程设计报告

题目:

校园导航系统

院系名称:

计算机学院

专业名称:

计算机科学与技术

班级:

学生姓名:

学号(8位):

指导教师:

设计起止时间:

2011年12月11日~2011年12月15日

一.设计目的

1.通过本次课程设计巩固《数据结构》中所学的内容;

2.提高自己上机编程以及调试能力。

二.设计内容

1.设计所在学校的校园平面图,所含景点不少于10个。

以图中顶点表示校园内各景点,存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。

2.为来访客人提供图中任意景点相关信息的查询。

3.为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。

三.概要设计

1.功能模块图;

2.各个模块详细的功能描述。

1.可以手动创建一个校园图。

2.可以直接从文件读取校园各个景点的信息。

3.可选择从任意个景点作为起点进行遍历。

4.输入景点序号查询该景点相关信息。

5.输入两个景点查询两个景点的最短,最佳及其所有的路径。

6.将校园图信息保存入文件。

4.详细设计

1.功能函数的调用关系图

 

2.各功能函数的数据流程图

1.Adjmatrix*g即结构体对象在main()中被创建在其他子函数中进行参数传递。

2.全局变量visited数组

visited数组在creatvisited()中被初始化,然后再在depthfirstsearch()中用。

3.全局变量shorest[][],path[][]

在floyd()中被赋值来分别记录v[i]-v[j]最短路径和v[i]-v[j]所经过景点。

3.重点设计及编码

两景点最短距离弗洛伊德算法

voidfloyd(adjmatrix*g)

{

inti,j,k;

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

shortest[i][j]=0;

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

{

shortest[i][j]=g->arcs[i][j].adj;

path[i][j]=0;

}

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

for(k=0;kvexnum;k++)

if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))

{

shortest[i][j]=shortest[i][k]+shortest[k][j];

path[i][j]=k;

path[j][i]=k;

}

}

五.测试数据及运行结果

1.正常测试数据和运行结果

要求提供3组正常测试数据和运行结果

2(遍历功能)

1(起始景点序号)

1校门呈长方形,校训:

爱国、求实、奋进

2喷泉呈鸽子形状,喷射出水花

3教学楼传授知识和学习知识

4实验楼供学生进行课程实验和教师办公

5洗浴中心供学生洗澡,内设单人间和双人间

6美食广场仅一层,快餐味道不错

7图书馆共七层,存储大量书籍供学生查阅和学习

8旭日苑共三层,主要的就餐场所

9体育馆内设篮球场,羽毛球场和观看席

10宿舍休息的场所

5(查询景点信息)

2(景点序号)

2喷泉呈鸽子形状,喷射出水花

6(查询两景点最短路径)

19(两景点序号)

1->2->7->9

1->9最短距离:

570米

2.异常测试数据及运行结果

要求提供2组异常测试数据和运行结果

9

无此功能模块请重新输入

5(功能模块)

11(景点序号)

无此景点请重新输入

六.调试情况,设计技巧及体会

1.改进方案

1.可将景点文件,边文件及账户密码合并为一个文件。

2.可设管理员,是管理员才能进行创建和修改,而客户只能进行查询。

3.可选用更好的算法,提升查询路径的速度。

2.体会

回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。

通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。

七.参考文献

《数据结构》杨剑主编清华大学出版社

《数据结构(C语言版)》.严蔚敏_吴伟民.主编清华大学出版社

八.附录:

源代码(电子版)

#include<>

#include<>

#include<>

#include<>

#definemaxsize40...\n\n",user1);

}

}

voidBrowser()

{

system("color0F");

printf("西安邮电学院平面图图");

printf("\n");

printf("正门");

printf("\n");

printf("校正门┃2.喷泉┃\n");

printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");

printf("\t\t┃3.教学楼┃4.实验楼┃\n");

printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");

printf("\t\t┃5.洗浴中心┃6.美食广场┃\n");

printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");

printf("\t\t┃7.图书馆┃8.旭日苑┃\n");

printf("\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n");

printf("\t\t┃9.体育馆┃10.宿舍┃\n");

printf("\t\t┗━━━━━━━━━━━━┻━━━━━━━━━━━━┛\n");

}

intlocatevertex(adjmatrix*g,intv)

{

intj,k;

for(k=0;kvexnum;k++)

if(g->vertex[k].top==v)

{

j=k;

break;

}

return(j);

}

voidcreatdn(adjmatrix*g)

{

inti,j,k,weight;

datav1,v2;

printf("请输入景点数和边数:

\n");

scanf("%d%d",&g->vexnum,&g->arcnum);

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

g->arcs[i][j].adj=infinity;

for(i=0;ivexnum;i++)

{printf("请输入该景点的序号,名称:

\n");

scanf("%d",&g->vertex[i].top);

gets(g->vertex[i].info);

printf("请输入景点的信息:

\n");

gets(g->vertex[i].introduce);

}

for(k=0;karcnum;k++)

{printf("请输入第%d条边关联的两个景点:

\n",k+1);

scanf("%d%d",&,&;

printf("请输入距离:

\n");

scanf("%d",&weight);

i=locatevertex(g,;

j=locatevertex(g,;

g->arcs[i][j].adj=weight;

g->arcs[j][i].adj=weight;

}

}

voidcreatvisited(adjmatrix*g)

{

inti;

for(i=0;ivexnum;i++)

visited[i]=0;

}

voiddepthfirstsearch(adjmatrix*g,intv)

{

intk;

visited[v]=1;

printf("景点序号:

%d名称:

%s\n",g->vertex[v].top,g->vertex[v].info);

for(k=0;kvexnum;k++)

if(!

visited[k]&&g->arcs[v][k].adj!

=infinity)

depthfirstsearch(g,k);

}

intpat[maxsize],visited[maxsize];

inttop=0;

voidDepsearch(adjmatrix*G,intnum1,intnum2)

{

intv,i;

top++;

pat[top]=num1;

visited[num1]=1;

if(num1==num2){

for(i=0;i<=top;i++)

printf("%s->",G->vertex[pat[i]].info);

printf("\b\b\n");

visited[num1]=0;

top--;

return;

}

for(v=0;vvexnum;v++){

if(G->arcs[num1][v].adj

visited[v])

Depsearch(G,v,num2);

}

visited[num1]=0;

top--;

}

voidallways(adjmatrix*G)

{

intnum1,num2,i;

charc='y';

while(c=='y')

{

printf("请输入起始和终点的景点编号:

");

scanf("%d,%d",&num1,&num2);

top=-1;

for(i=0;i

visited[i]=0;

Depsearch(G,num1,num2);

printf("\n是否继续查询最短路径(y/n):

");

op,g->vertex[i].info);

printf("请输入遍历的起点序号:

(1-%d)\n",g->vexnum);

scanf("%d",&n);

depthfirstsearch(g,n-1);

}

voidvernumfile(adjmatrix*g)

{

FILE*fp;

inti;

fp=fopen("","wt");

for(i=0;ivexnum;i++)

fprintf(fp,"%d%s%s\n",g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce);

fclose(fp);

}

voidarcnumfile(adjmatrix*g)

{

FILE*fp;

inti,j;

fp=fopen("","wt");

for(i=0;iarcnum;i++)

for(j=0;jarcnum;j++)

if(g->arcs[i][j].adj!

=infinity)

{

fprintf(fp,"%d%d%d\n",g->vertex[i].top,g->vertex[j].top,g->arcs[i][j].adj);

}

fclose(fp);

}

voidreadvernum(adjmatrix*g)

{

FILE*fp;

inti=0;

fp=fopen("","rt");

while(fscanf(fp,"%d%s%s",&g->vertex[i].top,g->vertex[i].info,g->vertex[i].introduce)!

=EOF)

{

printf("景点序号:

%d名称:

%s\n",g->vertex[i].top,g->vertex[i].info);

printf("景点信息:

%s\n",g->vertex[i].introduce);

printf("\n");

i++;

}

g->vexnum=i;

fclose(fp);

}

voidreadarcnum(adjmatrix*g)

{

FILE*fp;

inti=0,j=0,k=0;

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

g->arcs[i][j].adj=infinity;

fp=fopen("","rt");

while(fscanf(fp,"%d%d%d",&i,&j,&k)!

=EOF)

{

g->arcs[i-1][j-1].adj=k;

}

fclose(fp);

}

voidfindvernum(adjmatrix*g)

{

inti,n,a;

charchoice;

for(i=0;ivexnum;i++)

printf("%d\t%s\n",g->vertex[i].top,g->vertex[i].info);

printf("请选择查询方式的种类:

\n");

printf("1.按序号\n");

printf("2.按名称\n");

scanf("%d",&a);

do

{

printf("请输入要查询的景点序号(1-%d):

\n",g->vexnum);

scanf("%d",&n);

printf("景点名称:

%s\n",g->vertex[n-1].info);

printf("景点信息:

%s\n",g->vertex[n-1].introduce);

printf("\n");

printf("是否继续查询:

(y/n):

\n");

flushall();

scanf("%c",&choice);

}while(choice=='Y'||choice=='y');

}

voidfloyd1(adjmatrix*g)

{

inti,j,k;

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

shortest[i][j]=0;

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

{

shortest[i][j]=g->arcs[i][j].adj;

path[i][j]=0;

}

for(i=0;ivexnum;i++)

for(j=0;jvexnum;j++)

for(k=0;kvexnum;k++)

if(shortest[i][j]>(shortest[i][k]+shortest[k][j]))

{

shortest[i][j]=shortest[i][k]+shortest[k][j];

path[i][j]=k;

path[j][i]=k;

}

}

voidshortload(adjmatrix*g)

{

inti,j,a,b;

PlaceList();

floyd1(g);

printf("请输入起始景点和终止景点(1-%d):

\n",g->vexnum);

scanf("%d%d",&i,&j);

a=i;

b=j;

i=i-1;

j=j-1;

if(i

{

printf("%d",b);

while(path[i][j]!

=0)

{

printf("<-%d",path[i][j]+1);

if(i

j=path[i][j];

else

i=path[j][i];

}

printf("<-%d",a);

printf("\n\n");

printf("%d->%d距离是:

%d米\n\n",a,b,shortest[a-1][b-1]);

}

else

{

printf("%d",a);

...");

getch();

flushall();

system("cls");

}

}

main()

{

Cipher();

meun();

}

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

当前位置:首页 > 总结汇报 > 学习总结

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

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