数据结构课程设计报告有代码Word文档格式.docx
- 文档编号:22446598
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:28
- 大小:73.10KB
数据结构课程设计报告有代码Word文档格式.docx
《数据结构课程设计报告有代码Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计报告有代码Word文档格式.docx(28页珍藏版)》请在冰豆网上搜索。
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;
i<
g->
vexnum;
i++)
for(j=0;
j<
j++)
shortest[i][j]=0;
for(i=0;
for(j=0;
{
shortest[i][j]=g->
arcs[i][j].adj;
path[i][j]=0;
}
for(i=0;
for(j=0;
for(k=0;
k<
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(景点序号)
6(查询两景点最短路径)
19(两景点序号)
1->
2->
7->
9
9最短距离:
570米
2.异常测试数据及运行结果
要求提供2组异常测试数据和运行结果
9
无此功能模块请重新输入
5(功能模块)
11(景点序号)
无此景点请重新输入
六.调试情况,设计技巧及体会
1.改进方案
1.可将景点文件,边文件及账户密码合并为一个文件。
2.可设管理员,是管理员才能进行创建和修改,而客户只能进行查询。
3.可选用更好的算法,提升查询路径的速度。
2.体会
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是苦多于甜,但是可以学到很多很多的东西,同时不仅可以巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
七.参考文献
《数据结构》杨剑主编清华大学出版社
《数据结构(C语言版)》.严蔚敏_吴伟民.主编清华大学出版社
八.附录:
源代码(电子版)
#include<
stdio.h>
stdlib.h>
conio.h>
string.h>
#definemaxsize40//最大景点数
#defineinfinity32768//两景点不可到距离长度
intvisited[maxsize];
intpath[maxsize][maxsize];
intshortest[maxsize][maxsize];
typedefstruct
inttop;
charinfo[maxsize];
charintroduce[maxsize];
}data;
typedefstructnode
intadj;
}node;
datavertex[maxsize];
nodearcs[maxsize][maxsize];
intvexnum,arcnum;
}adjmatrix;
voidCipher()
{
FILE*fp;
charuser0[20],user1[20],cipher0[10],cipher1[10],ch;
inti;
fp=fopen("
Cipher.txt"
"
r"
);
if((fp=fopen("
))==NULL)
{
printf("
nousermessage!
\n"
exit
(1);
}
fscanf(fp,"
%s%s"
user0,cipher0);
fclose(fp);
printf("
\n\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━┓\n"
\t\t┃XI'
ANUNIVERSITYOFPOSTS&
TELLCOMUNICATIONS┃\n"
\t\t┃*********SchoolYardGuidebook*********┃\n"
\t\t┗━━━━━━━━━━━━━━━━━━━━━━━━┛\n"
\t\tinputuser'
sname:
\t"
scanf("
%s"
user1);
\t\tintputcipher:
for(i=0;
i<
10;
i++)
ch=getch();
if(ch==13)
break;
*"
cipher1[i]=ch;
cipher1[i]=0;
if(strcmp(user0,user1)!
=0)
system("
cls"
/*清屏*/
erroruser'
sname!
main();
if(strcmp(cipher0,cipher1)!
errorcipher!
else
\n\n\t\tWelcometoTheSchoolYardGuidebook!
%s.....\n\n"
}
voidBrowser()
system("
color0F"
西安邮电学院平面图图"
正门"
//||\\\\"
//||\\行政楼==========="
//喷泉\\||||"
基础教学楼||\\||||"
||||\\||||"
实验楼||大学生活动中心||"
||||||\\||"
||====图书馆==人工湖\\||"
||||\\||"
||||=============东门"
||"
操场======================体育馆"
\\||"
=========食堂"
||===================宿舍"
voidPlaceList()
color0A"
\t\t┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n"
\t\t┃已存文件景点一览表┃\n"
\t\t┣━━━━━━━━━━━━┳━━━━━━━━━━━━┫\n"
\t\t┃1.学校正门┃2.喷泉┃\n"
\t\t┣━━━━━━━━━━━━╋━━━━━━━━━━━━┫\n"
\t\t┃3.教学楼┃4.实验楼┃\n"
\t\t┃5.洗浴中心┃6.美食广场┃\n"
\t\t┃7.图书馆┃8.旭日苑┃\n"
\t\t┃9.体育馆┃10.宿舍┃\n"
\t\t┗━━━━━━━━━━━━┻━━━━━━━━━━━━┛\n"
intlocatevertex(adjmatrix*g,intv)
intj,k;
for(k=0;
if(g->
vertex[k].top==v)
{
j=k;
}
return(j);
voidcreatdn(adjmatrix*g)
inti,j,k,weight;
datav1,v2;
请输入景点数和边数:
%d%d"
&
vexnum,&
arcnum);
g->
arcs[i][j].adj=infinity;
{printf("
请输入该景点的序号,名称:
scanf("
%d"
vertex[i].top);
gets(g->
vertex[i].info);
请输入景点的信息:
vertex[i].introduce);
for(k=0;
arcnum;
请输入第%d条边关联的两个景点:
k+1);
v1.top,&
v2.top);
请输入距离:
weight);
i=locatevertex(g,v1.top);
j=locatevertex(g,v2.top);
g->
arcs[i][j].adj=weight;
arcs[j][i].adj=weight;
voidcreatvisited(adjmatrix*g)
visited[i]=0;
voiddepthfirstsearch(adjmatrix*g,intv)
intk;
visited[v]=1;
景点序号:
%d名称:
%s\n"
g->
vertex[v].top,g->
vertex[v].info);
if(!
visited[k]&
&
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){
=top;
printf("
%s->
"
G->
vertex[pat[i]].info);
\b\b\n"
visited[num1]=0;
top--;
return;
for(v=0;
v<
G->
v++){
if(G->
arcs[num1][v].adj<
infinity&
!
visited[v])
Depsearch(G,v,num2);
visited[num1]=0;
top--;
voidallways(adjmatrix*G)
intnum1,num2,i;
charc='
y'
;
while(c=='
)
请输入起始和终点的景点编号<
num1,num2>
:
%d,%d"
num1,&
num2);
top=-1;
maxsize;
visited[i]=0;
Depsearch(G,num1,num2);
\n是否继续查询最短路径(y/n):
//system("
%c"
c);
c=getchar();
voidsearch(adjmatrix*g)
inti,n;
creatvisited(g);
%d\t%s\n"
vertex[i].top,g->
请输入遍历的起点序号:
(1-%d)\n"
vexnum);
n);
depthfirstsearch(g,n-1);
voidvernumfile(adjmatrix*g)
fp=fopen("
vernum.txt"
wt"
fprintf(fp,"
%d%s%s\n"
vertex[i].info,g->
voidarcnumfile(adjmatrix*g)
inti,j;
arcnum.txt"
if(g->
arcs[i][j].adj!
{
fprintf(fp,"
%d%d%d\n"
vertex[j].top,g->
arcs[i][j].adj);
}
fclose(fp);
voidreadvernum(adjmatrix*g)
inti=0;
rt"
while(fscanf(fp,"
%d%s%s"
vertex[i].introduce)!
=EOF)
{
景点信息:
i++;
g->
vexnum=i;
}
voidreadarcnum(adjmatrix*g)
inti=0,j=0,k=0;
for(i=0;
i<
vexnum;
for(j=0;
j<
j++)
arcs[i][j].adj=infinity;
fp=fopen("
while(fscanf(fp,"
%d%d%d"
i,&
j,&
k)!
arcs[i-1][j-1].adj=k;
fclose(fp);
voidfindvernum(adjmatrix*g)
inti,n,a;
charchoice;
请选择查询方式的种类:
1.按序号\n"
2.按名称\n"
a);
do
请输入要查询的景点序号(1-%d):
景点名称:
vertex[n-1].info);
vertex[n-1].introduce);
是否继续查询:
(y/n):
flushall();
choice);
}while(choice=='
Y'
||choice=='
voidfloyd1(adjmatrix*g)
arcs[i][j].adj
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 报告 代码