数据结构课程设计报告_数据结构课程设计心得

其他范文 时间:2020-02-26 22:12:45 收藏本文下载本文
【www.daodoc.com - 其他范文】

数据结构课程设计报告由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“数据结构课程设计心得”。

扬州大学信息工程学院

《数据结构》

---课程设计报告

题目: 校园导游咨询

班级: 学号: 姓名 指导教师:

一、设计题目

设计一个校园导游程序,为来访的客人提供各种信息查询服务。

二、需求分析

要求:

(1)设计你所在学校的校园平面图,所含景点不少于10个,以图中顶点表示校内各景点,存放景点名称,代号,简介等信息;以边表示路径,存放路径长度等相关信息。

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

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

一般情况下,校园的道路是双向通行的,可设校园平面图是一个无向网。顶点和边均含有相关信息。

三、概要设计

1.创建校园图:

(1)先定义节点个数N,边的最大值(MAXedg),节点(景点名称、景点信息),邻接点,边,顶点向量,当前顶点数和边数。

(2)先给一个节点赋上其相关信息,然后再用p =(Node)malloc(sizeof(edgenode))语句申请下一结点,再给所申请的节点赋上相关信息,直到节点数为N=10为止。

(3)读入道路的起始点,为邻接矩阵的边赋相应的值。

(4)节点和边的相关信息都弄好了后,校园图也就创建好了。

2.利用函数Name给10个节点赋上相应的名称,利用函数Information给各节点添加相应的介绍信息。

3.利用函数travgraph来查找景点信息,要查找景点名称时调用Name函数,要查找景点介绍信息时调用Information函数。

4.手动创建一个校园图creat(Matrix_Graph *G),然后为相应的边赋上真正的值。

5.用path函数来求任意两景点之间的最短路径。

6.用main函数来输出结果:用switch语句分别输出,要创建校园图时调用creatgraph函数;查找景点相关信息时调用travgraph函数;要查找任意两景点之间的最短路径时,先输入你目前所在的位置,再输入你的目的地,最后调用path函数。

四、详细设计

typedef int AdjMatrix[MAX][MAX];typedef struct { int vexs[MAX];AdjMatrix arcs;}Matrix_Graph;//图的矩阵表示法。typedef struct edgenode { int adjvex;//临接点序号

int length;//道路长度

char info[10];//景点名称

char info2[100];//景点详细信息

struct edgenode *next;}edgenode, *Node;typedef struct { char name[10];//存储景点的名称.char information[100];//具体的介绍此景点

struct edgenode *link;//指向下一个景点 }vexnode;//景点及其信息.typedef struct Edge { int lengh;//边的权值,表示路径长度.int ivex, jvex;//边的两端顶点号

struct Edge *next;//指向下一条边 } EdgeType;//边及其信息.typedef struct { int num;//顶点编号。

char name[10];//顶点名称 } vertex;

typedef struct { vertex vexs[MAX];//顶点集合int edges[MAX][MAX];//临街矩阵 }adjmax;//adj

(1)首先创建一个校园图并用邻接矩阵存储,程序会自动调用creatgraph(g,&n,e,&adj),函数进入到创建校园图界面,用循环语句来完成:

for(i = 1;i

fscanf(fp,“%d %d %dn”,&e[i].lengh,&e[i].ivex,&e[i].jvex);//读入道路长度和起始点

s = e[i].ivex;//s是起点,d是终点。

d = e[i].jvex;

len = e[i].lengh;

adj->edges[s][d] = e[i].lengh;//为邻接矩阵中相应的边赋值

adj->edges[d][s] = e[i].lengh;

p =(Node)malloc(sizeof(edgenode));//申请一个弧节点。

p->next = NULL;

q =(Node)malloc(sizeof(edgenode));

q->next = NULL;

p->adjvex = d;// 弧p指向的定点

p->length = len;

strcpy(p->info,g[d].name);//为景点赋名称

strcpy(p->info2,g[d].information);//为景点赋介绍信息

q->adjvex = s;// 弧q指向的定点

q->length = len;

strcpy(q->info,g[s].name);//为景点赋名称

strcpy(q->info2,g[s].information);//为景点赋介绍信息

p->next = g[s].link;//头插法建立邻接表

g[s].link = p;

q->next = g[d].link;

g[d].link = q;}

(2)调用Name(i)和information(i)完成对校园景点的名称和信息的介绍。

(3)当游客选择了要查找景点的信息的介绍这一项功能的时候,程序就会调用travgraph(g,n,adj);函数进入到查找景点的介绍的界面,当游客输入了需要查找的景点的名称的时候,程序利用循环语句:

do{

printf(“是否继续? Y/N”);

scanf(“%c”,&ch);

getchar();

if(ch == 'Y' || ch == 'y')//继续

{

flag = 1;

i = 1;

printf(“请输入您要查询的景点序号:n”);

scanf(“%d”,&len);

getchar();

printf(“此景点的名称是:”);

Name(len);

printf(“此景点的介绍是:”);

Information(len);

continue;

}

else

flag = 0;//不继续

break;}while(1);

(4)手动给校园图赋上相关信息(景点名称、代号、简介),路径及路径长度。得到一个模拟的校园图:

(5)当游客选择了要查找两个景点之间的最短距离这一项功能的时候,程序就会调用path(&G,i,j);函数进入到查找两个景点之间的最短距离的操作界面当中,当游客输入了两个景点的名称过后,程序会调用creat(&G);函数给校园图赋上相关信息(景点名称、代号、简介),路径及路径长度,然后调用path(&G,i,j);函数进入到查找最短路径问题的程序当中。for(i=0;i

for(j=0;j

for(i=1;i

{

T[i]=-1;//初始值为-1。

flag[i]=1;//初始值为1。

d[i]=MAX;//路径长度初始值为无穷大,用MAX表示。

}

flag[s]=0;//修改标识。

while(c

{

t=MAX;

for(i=1;i

if(flag[i]&&G->arcs[s][i]

{

t=G->arcs[s][i];v=i;r[v][1]=v;}

for(i=1;i

for(j=1;j

if(flag[j]&&d[i]+G->arcs[T[i]][j]

{

t=d[i]+G->arcs[T[i]][j];v=j;

if(r[v][0]!=-1)

{

u=1;

while(r[T[i]][u]!=0)

{

r[v][u]=r[T[i]][u];u++;}

}

r[v][u]=v;

}

r[v][0]=-1;

T[c]=v;

flag[v]=0;

d[c]=t;

c++;

}

printf(“nThe path is:n(%d)”,s);

j=1;

while(r[e][j]!=0)

{

printf(“-->(%d)”,r[e][j]);j++;}//显示路径。

(6)主函数是一个程序的主体,当我们要进行我们所需要的操作的时候我们就要根据主函数中的显示信息和它给我们的相关的提示信息来进行所需要的操作。

五、测试数据及运行结果

1.运行结果界面:

2.由于我编写创建校园图的程序时,不会编写打开一个文本的程序,所以创建校园图的运行结果显示的是“打开文本错误”。

3.查找景点相关信息的结果:

4.查找最短路径的结果:

六、源程序

#define N 10 #define MAX 20 //图中顶点数的最大值 #define MAXedg 30 //图中边数的最大值 #include #include #include #include typedef int AdjMatrix[MAX][MAX];typedef struct { int vexs[MAX];AdjMatrix arcs;}Matrix_Graph;//图的矩阵表示法。typedef struct edgenode { int adjvex;//临接点序号

int length;//道路长度

char info[10];//景点名称

char info2[100];//景点详细信息

struct edgenode *next;}edgenode, *Node;typedef struct { char name[10];//存储景点的名称.char information[100];//具体的介绍此景点

struct edgenode *link;//指向下一个景点 }vexnode;//景点及其信息.typedef struct Edge { int lengh;//边的权值,表示路径长度.int ivex, jvex;//边的两端顶点号

struct Edge *next;//指向下一条边 } EdgeType;//边及其信息.typedef struct { int num;//顶点编号。

char name[10];//顶点名称 } vertex;

typedef struct { vertex vexs[MAX];//顶点集合int edges[MAX][MAX];//临街矩阵 }adjmax;//adj FILE *fp;//文件的读取 void clrscr()//清屏 { system(“cls”);} void creatgraph(vexnode g[],int *n, EdgeType e[],adjmax *adj)//创建校园图 { int b,i,s,d,len;struct edgenode *p,*q;//定义图的结构体

if((fp = fopen(“file.txt”,“r”))== NULL)//打开文件

{

printf(“文件打开错误!n”);

getchar();

exit(0);} fscanf(fp,“%d %dn”,n,&b);//读入景点个数和边数

for(i = 1;i

{

fscanf(fp,“%s %sn”,&g[i].name,&g[i].information);

strcpy(adj->vexs[i].name,g[i].name);

g[i].link = NULL;//初始化

} for(i = 1;i

fscanf(fp,“%d %d %dn”,&e[i].lengh,&e[i].ivex,&e[i].jvex);//读入道路长度和起始点

s = e[i].ivex;//s是起点,d是终点。

d = e[i].jvex;

len = e[i].lengh;

adj->edges[s][d] = e[i].lengh;//为邻接矩阵中相应的边赋值

adj->edges[d][s] = e[i].lengh;

p =(Node)malloc(sizeof(edgenode));//申请一个弧节点。

p->next = NULL;

q =(Node)malloc(sizeof(edgenode));

q->next = NULL;

p->adjvex = d;// 弧p指向的定点

p->length = len;

strcpy(p->info,g[d].name);//为景点赋名称

strcpy(p->info2,g[d].information);//为景点赋介绍信息

q->adjvex = s;// 弧q指向的定点

q->length = len;

strcpy(q->info,g[s].name);//为景点赋名称

strcpy(q->info2,g[s].information);//为景点赋介绍信息

p->next = g[s].link;//头插法建立邻接表

g[s].link = p;

q->next = g[d].link;

g[d].link = q;} printf(“校园旅游图已经建立!n”);getchar();} void Name(int i){

switch(i){ case 1:

printf(“1:学校正门nn”);break;case 2:

printf(“2:教学楼区nn”);break;case 3:

printf(“3:图书馆nn”);break;case 4:

printf(“4:社团办公室nn”);break;case 5:

printf(“5:宿舍区nn”);break;case 6:

printf(“6:食堂nn”);break;case 7:

printf(“7:校园商业区nn”);break;case 8:

printf(“8:大操场nn”);break;case 9:

printf(“9:校医院nn”);break;case 10:

printf(“10: 大学活动中心nn”);break;default:

printf(“景点编号输入错误!请输入1->10的数字编号!nn”);break;} } /*Name*/ void Information(int i){/*景点介绍*/ switch(i){ case 1:

printf(“学校正门:正门旁边是一条宽敞的马路,交通方便;进门后直对面就是两栋高大的主楼,气势宏伟。nn”);break;case 2:

printf(“教学楼区: 教学楼众多且形状各异,教室大小不一,适宜各种人数班级使用。nn”);break;case 3:

printf(“图书馆: 学校信息资源中心,外表呈三角形,宏伟壮观,藏有大量各种书刊,设有电子查阅室和自习室,是学生学习的好地方。nn”);break;case 4:

printf(“社团办公室:是学校各个学生组织开会,策划活动的办公处。nn”);break;case 5:

printf(“宿舍区: 有八个公寓,是大部分学生的住所。nn”);break;case 6:

printf(“食堂: 位于教学楼与宿舍区之间,里面有各个地方的小吃,味道不错,是学生就餐的主要餐厅。nn”);break;case 7:

printf(“校园商业区:里面有书店、打印和复印的地方、教育超市、水果超市,为学生们提供了方便。nn”);break;case 8:

printf(“大操场:有足球场,篮球场,是学生和老师体育锻炼的主要地方。nn”);break;case 9:

printf(“校医院: 设备不太齐全,只能治疗一些常见的小病,但是价格很便宜。nnn”);break;case 10:

printf(“大学活动中心:里面还可以举行各项文艺活动。nn”);break;default:

printf(“景点编号输入错误!请输入1->10的数字编号!nn”);break;} }/*Information*/ void travgraph(vexnode g[],int n,adjmax adj)//查找指定景点信息 { int i = 1,flag = 1,len;//len存储要查询的景点的序号

char ch;printf(“请输入您要查询的景点序号:n”);scanf(“%d”,&len);getchar();printf(“此景点的名称是:”);Name(len);printf(“此景点的介绍是:”);Information(len);do{

printf(“是否继续? Y/N”);

scanf(“%c”,&ch);

getchar();

if(ch == 'Y' || ch == 'y')//继续

{

flag = 1;

i = 1;

printf(“请输入您要查询的景点序号:n”);

scanf(“%d”,&len);

getchar();

printf(“此景点的名称是:”);

Name(len);

printf(“此景点的介绍是:”);

Information(len);

continue;

}

else

flag = 0;//不继续

break;}while(1);} void creat(Matrix_Graph *G){ int i,j;for(i=1;ivexs[i]=i;//初始化,0号位不用。

for(i=1;i

for(j=1;jarcs[i][j]=0;//初始值为0。

G->arcs[1][2]=2;G->arcs[1][9]=5;//表示景点一到景点二的距离是2。

G->arcs[2][1]=2;G->arcs[2][3]=5;G->arcs[2][4]=4;G->arcs[2][9]=6;G->arcs[3][2]=5;G->arcs[3][4]=7;G->arcs[3][7]=5;G->arcs[3][9]=6;G->arcs[3][10]=6;

G->arcs[4][2]=4;G->arcs[4][6]=7;G->arcs[4][10]=7;

G->arcs[5][6]=4;G->arcs[5][7]=6;G->arcs[5][8]=8;G->arcs[6][4]=7;G->arcs[6][5]=4;G->arcs[6][7]=3;G->arcs[6][10]=7;

G->arcs[7][6]=3;G->arcs[7][8]=4;G->arcs[7][10]=6;

G->arcs[8][5]=8;G->arcs[8][7]=4;G->arcs[8][9]=9;G->arcs[9][1]=5;G->arcs[9][2]=6;G->arcs[9][3]=6;G->arcs[9][8]=9;G->arcs[10][3]=6;G->arcs[10][4]=7;G->arcs[10][6]=7;G->arcs[10][7]=6;

for(i=1;i

for(j=1;j

if(G->arcs[i][j]==0)G->arcs[i][j]=MAX;//没有被重新赋值的,表示两景点之间

//没有路,用MAX表示无穷大。} void path(Matrix_Graph *G,int s,int e){ int i,j,u,c=1,t,v;int r[N+1][N+1];//用来存放路径上的景点。

int T[N],flag[N],d[N];for(i=0;i

for(j=0;j

for(i=1;i

{

T[i]=-1;//初始值为-1。

flag[i]=1;//初始值为1。

d[i]=MAX;//路径长度初始值为无穷大,用MAX表示。

}

flag[s]=0;//修改标识。

while(c

{

t=MAX;

for(i=1;i

if(flag[i]&&G->arcs[s][i]

{

t=G->arcs[s][i];v=i;r[v][1]=v;}

for(i=1;i

for(j=1;j

if(flag[j]&&d[i]+G->arcs[T[i]][j]

{

t=d[i]+G->arcs[T[i]][j];v=j;

if(r[v][0]!=-1)

{

u=1;

while(r[T[i]][u]!=0)

{

r[v][u]=r[T[i]][u];u++;}

}

r[v][u]=v;

}

r[v][0]=-1;

T[c]=v;

flag[v]=0;

d[c]=t;

c++;

}

printf(“nThe path is:n(%d)”,s);

j=1;

while(r[e][j]!=0)

{

printf(“-->(%d)”,r[e][j]);j++;}//显示路径。

printf(“nn”);} void main()//主函数 { int i,j;Matrix_Graph G;creat(&G);int n = 0;//景点数目

vexnode g[MAX];//保存顶点及其信息

EdgeType e[MAXedg];//保存边及其信息

adjmax adj;//保存边和定点

char choice = 'x';while(1){

clrscr();

printf(“nnttt***校园导游系统***”);printf(“ntt*************************************nn”);

printf(“ttt1.文件读入并创建校园图:nn”);

printf(“ttt2.查询景点详细信息:nn”);

printf(“ttt3.查找两景点间最短路径:nn”);

printf(“ttt0.退出nn”);

printf(“tttt2013/06/29”);printf(“ntt************************************nn”);

printf(“Please enter your choice(0-3):n ”);

choice = getchar();

switch(choice)

{

case '1':

clrscr();

creatgraph(g,&n,e,&adj);//创建图(景点,景点数,边,边和景点)

printf(“n打开文件错误n”);

getchar();

break;

case '2':

clrscr();

travgraph(g,n,adj);//查询景点信息

getchar();

break;

case '3':

clrscr();

printf(“2你目前的位置是:n”);

scanf(“%d”,&i);

getchar();

printf(“2你的目的地是:n”);

scanf(“%d”,&j);

getchar();

}

path(&G,i,j);//查找最短路径

getchar();

creat(&G);

do{

printf(“是否继续? Y/N”);

char ch;

int flag=1;

scanf(“%c”,&ch);

getchar();

if(ch == 'Y' || ch == 'y')//继续

{

flag = 1;

i = 1;

printf(“2你目前的位置是:n”);

scanf(“%d”,&i);

getchar();

printf(“2你的目的地是:n”);

scanf(“%d”,&j);

getchar();

path(&G,i,j);//查找最短路径

getchar();

creat(&G);

continue;

}

else

flag = 0;//不继续

break;

}while(1);

break;case '0':

clrscr();

printf(“n*******按任意键退出********n”);

getchar();

exit(0);

break;default:

printf(“n输入错误,请重新输入0-3之间的数字:n”);

getchar();

break;} } getchar();

数据结构课程设计报告

《数据结构》 课程设计报告1 目录《数据结构》 ..........................................................................................................................

数据结构课程设计报告

计算机科学与工程系数据结构课程设计报告课程设计题目 迷宫 航班信息查询系统 学 号 姓 名 班 级专 业 网络工程 完 成 时 间 2013-1-4 指 导 教 师 数据结构课程设计 迷宫......

数据结构课程设计报告

《数据结构》课程设计哈希表实现电话号码查询系统一目的利用《数据结构》课程的相关知识完成一个具有一定难度的综合设计题目,利用C/C++语言进行程序设计,并规范地完成课程设......

数据结构课程设计报告

正文要求:对每一个题目,正文必须包括以下几个方面 知识点回顾: 实验要求:实验过程:包括设计思路,算法描述,程序清单,调试等等; 实验小结: 注意:(1)正文中字体用小四号宋体,行间距1.25倍行......

数据结构课程设计报告

数据结构课程设计散列表的应用:插队买票专业 计算机科学与技术(网络技术)金玲 计算机131 1310704114 张静林 2015年1月23日 学生姓名 班学级 号指导教师 完成日期目录1 概述…......

下载数据结构课程设计报告word格式文档
下载数据结构课程设计报告.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文