西安邮电大学-(数据结构)校园导游系统课程教学设计报告

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档