数据结构课程设计——校园导游咨询系统

  • 格式:doc
  • 大小:248.50 KB
  • 文档页数:15

下载文档原格式

  / 15
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构课程设计——校园导游咨询系统

1:需求分析:

(1)任务:编制一个为来访客人进行最短路径导游的程序

(2)要求:从学校的平面上选取n个有代表性的景点,根据用户指定的起点和终点输出相应路径。

2:概要设计:

(1)1)a)AdjMGraph.h图操作的函数所放的头文件

b) AdjMGraphCreate.h图的创建函数所放的头文件

c) Dijkstra.h狄克斯特拉函数设计所放的头文件

d) SeqList.h存放顺序表的头文件

2)SchoolGuide.c文件包括以下三个函数

void SgPrint(AdjMGraph g,int n,int distance[],int path[],int j)函数,其功能是将源点到各个结点的最短距离和最短路径的结果输出;

void Sgblueprint()函数,其功能是将校园平面图输出;

void main(void)函数,主函数,功能是调用测试数据值,显示主菜单,根据用户输入的i进行不同功能操作,随后根据用户输入的ch值进行不同功能操作。

(2)该程序所使用的存储结构是顺序存储;

(3)流程图:

图1-1主函数main()流程图

图1-2 SgPrint函数流程图

3:详细设计:

(1)/*顺序表头文件SeqList.h*/

typedef struct

{

DataType list[MaxSize];

int size;

}SeqList;

void ListInitiate(SeqList *L) /*初始化顺序表L*/

{

L->size=0; /*定义初始化数据元素个数*/

}

int ListLength(SeqList L) /*返回顺序表L的当前数据元素个数*/ {

return L.size;

}

int ListInsert(SeqList *L,int i,DataType x)

/*在顺序表L的第i(0≤i≤size)个位置前插入数据元素值x*/

/*插入成功返回1,插入失败返回0*/

{int j;

if(L->size>=MaxSize)

{

printf("顺序表已满无法插入!\n");

return 0;}

else if(i<0||i>L->size)

{

printf("参数i不合法!\n");

return 0;}

else{

/*为插入做准备*/

for(j=L->size;j>i;j--)

L->list[j]=L->list[j-1];

L->list[i]=x;/*插入x*/

L->size++;/*元素个数加1*/

return 1;}

}

int ListDelete(SeqList *L,int i,DataType *x)

{

/*删除顺序表L中位置为i(0≤i≤size-1)的数据元素并存放到x中*/ /*删除成功返回1,删除失败返回0*/

int j;

if(L->size<=0)

{

printf("顺序表已空无数据元素可删!\n");

return 0;}

else if(i<0||i>L->size-1)

{

printf("参数i不合法");

return 0;}

else

{

*x=L->list[i]; /*保存删除的元素到x中*/

/*依次前移*/

for(j=i+1;j<=L->size-1;j++)

L->list[j-1]=L->list[j];

L->size--;

return 1;

}

}

int ListGet(SeqList L,int i,DataType *x)

/*取顺序表L中第i个数据元素存于x中,成功返回1.失败返回0*/

{

if(i<0||i>L.size-1)

{

printf("参数i不合法!\n");

return 0;}

else

{*x=L.list[i];

return 1;}

}

(2)/*AdjMGraph.h图操作的函数所放的头文件*/

#include"Seqlist.h"/*包含顺序表头文件*/

typedef struct

{

SeqList Vertices;/*存放结点的顺序表*/

int edge[MaxVertices][MaxVertices];/*存放边的邻接矩阵*/ int numOfEdges;/*边的条数*/

}AdjMGraph;/*图的结构体定义*/

void Initiate(AdjMGraph *G,int n)/*初始化*/

{

int i,j;

for(i=0;i

for(j=0;j

{

if(i==j) G->edge[i][j]=0;

else G->edge[i][j]=MaxWeight;

}

G->numOfEdges=0;/*边的条数置为0*/

ListInitiate(&G->Vertices);/*顺序表初始化*/

}

void InsertVertex(AdjMGraph *G,DataType vertex)

/*在图G中插入结点vertex*/

{

ListInsert(&G->Vertices,G->Vertices.size,vertex);

/*顺序表尾插入*/

}

void InsertEdge(AdjMGraph *G,int v1,int v2,int weight)

/*在图G中插入边,边的权为weight*/

{

if(v1<0||v1>G->Vertices.size||v2<0||v2>G->Vertices.size) {

printf("参数v1或v2越界出错!\n");

exit(1);

}

G->edge[v1][v2]=weight;

G->numOfEdges++;

}

void DeleteEdge(AdjMGraph *G,int v1,int v2)