西安邮电大学-(数据结构)校园导游系统课程教学设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
西安郵電大學
数据结构课程设计报告书
系部名称计算机学院
学生姓名崔斌
专业名称计算机科学与技术专业班级计科1106
学号04111185 指导教师衡霞
时间2012年12月15日至
2012年12月21日
实验题目:校园导游系统一、实验目的
①:为了让非本校的同学们,家长们能够充分了解本校---西安邮电大学。
②:实践数据结构所学知识。
二、实验内容
①:学校简易的俯视图。
②:各个景点的简单介绍。
③:任意两景点之间的所有路径。
④:任意两景点之间的最少中转景点路径。
⑤:任意两景点之间的带权路径长度。
三、需求分析
Init();初始化两个顺序栈
Menu();进行选择的模块函数;
Intro();景点介绍函数;
Search();判断是否有此编号的景点;
Findallpath();找路径函数;
Findallway();找任意两个景点之间的所有路径;(存在栈里面)Shortestway();任意两个景点之间中转次数最少的路径;(从栈里面读取出来)Niceway();任意两个景点之间总权值最小的路径;(从栈里面读取出来)Calculate();(从栈里面读取出来相关数据),进行分析运算;
Byebye(); 你懂得!
四、概要设计
1、方案设计
对系统进行分析,给出景区图
重点:
①:
//思想;递归结合循环,然后,找到终点时还要回溯;
void findallway(adjlist *G,int m,int n)//两点之间的所有路径
{
int i,t,k;
arcnode *p;
pa_th rp;
push(s,m);
G->vertex[m-1].flag=1;
if(m==n)
{
rp.sumweight=k=calculate(G);
rp.sum=s->top;
rp.num=(y+1);
push1(&z,rp);
printf(" 路径%3d为(途径%2d个景点,长度为%3d):",y+1,s->top,k);
for(i=0;i<=s->top;i++)
printf("->%d",s->elem[i]);
printf("\n");
G->vertex[m-1].flag=1;
y++;//外部全局变量
}
else
for(p=G->vertex[m-1].firstarc;p!=NULL;p=p->nextarc)
{
t=p->num;
if(G->vertex[t-1].flag==0)
findallway(G,t,n);
}
G->vertex[s->elem[s->top]-1].flag=0;//两句顺序不可以调换
pops(s);
}
②:
//从文件里读取数据;
错误1;不知道此节点有几个邻接点,因为%s的原因,就会只把第一个节点的相关数据读出来,从第二个节点的相关信息处,开始读出错误(即烫烫烫烫烫烫烫烫烫烫烫);为此,我在文件里面加了此节点的邻接点个数m,readnet()里面又有count相加以监视不超过m;
错误2;读文件时,因为有链表的部分,就按照单链表的创建些写,结果总是此节点的最后一个邻接点没被读到内存里,究其原因,是最后一个p1没有连接到此条链表的尾部,(不仅我把p2->nextarc=NULL;还把free(p1);)
void readnet(adjlist *G)
{
int i,count,m;
arcnode *head,*p2,*p1;
FILE *fp;
fp=fopen(U,"rt");
if(fp==NULL)
{
printf("文件打开失败!!");exit(0);
}
for(i=0;i { fscanf(fp,"%d %s %s %d %d",&G->vertex[i].num,G->vertex[i].name,G->vertex[i].introduce,&G->vertex[ i].sum,&G->vertex[i].flag);//fprintf() 的"后面不加第一个空格也可以。 m=G->vertex[i].sum; p2=H;head=p2; p1=H; fscanf(fp,"%d %d",&p1->num,&p1->weight);//fprintf() 的"后面不加第一个空格也可以。 count=1; while(count { p2->nextarc=p1; p2=p1; p1=H; fscanf(fp,"%d %d",&p1->num,&p1->weight);//fprintf() 的"后面不加第一个空格也可以。 count++; } p2->nextarc=p1;//千万不能忘掉此语句,令人蛋碎一地呀 p2=p1;//千万不能忘掉此语句,令人蛋碎一地呀,否则会丢掉每个节点的最后一个邻接点 p2->nextarc=NULL; //free(p1);//千万不能有此语句,令人蛋碎一地呀 G->vertex[i].firstarc=head->nextarc; } fclose(fp); } 2、数据结构说明 程序中定义的数据类型——结构体(各个成员的作用); 表定义: typedef struct Arcnode { int num;//顶点编号 int weight;//顶点与此点之间路径的权值 struct Arcnode *nextarc; }arcnode; typedef struct Vertexnode { int num;//顶点编号 char name[20];//顶点景点名称 char introduce[40];//景点简介 int sum;//与其他连接的景点个数//令人蛋疼的读文件呀 int flag;//默认为0,刚好可以标志。 arcnode *firstarc; }vertexnode; typedef struct AA { vertexnode vertex[MAX_vertex_num];//顶点数组 int other;//备用 }adjlist;