实验六 图的应用及其实现

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

实验六图的应用及其实现

一、实验目的

1.进一步功固图常用的存储结构。

2.熟练掌握在图的邻接表实现图的基本操作。

3.理解掌握AOV网、AOE网在邻接表上的实现以及解决简单的应用问题。

二、实验内容

从键盘上输入AOV网的顶点和有向边的信息,建立其邻接表存储结构,然后对该图拓扑排序,并输出拓扑序列. 试设计程序实现上述AOV网的类型定义和基本操作,完成上述功能。

相关常量及结构定义:

typedef int InfoType;

typedef char VertexType;

typedef int SElemType;

#define STACK_INIT_SIZE 100 //存储空间初始分配量

#define STAXKINCREMENT 10 //存储空间分配增量

#define MAX_VERTEX_NUM 20

typedef struct ArcNode

{

int adjvex;

struct ArcNode *nextarc;

InfoType *info;

}ArcNode;

typedef struct VNode

{

VertexType data;

struct ArcNode *firstarc;

}VNode,AdjList[MAX_VERTEX_NUM];

typedef struct ALGraph

{

AdjList vertices;

int vexnum, arcnum;

int kind;

}ALGraph;

typedef struct

{

SElemType *base;

SElemType *top;

int stacksize;

}SqStack;

设计相关函数声明:

int CreateDG(ALGraph &G)

int InitStack(SqStack &S)

int Push(SqStack &S,SElemType e)

int Pop(SqStack &S,SElemType &e)

int StackEmpty(SqStack S)

void FindInDegree(ALGraph G,int *indegree)

int TopologicalSort(ALGraph G)

三、数据结构与核心算法的设计描述

1.创建AOV网

int CreateDG(ALGraph &G)

{

int i,j,k,v1,v2;

cout<<"请输入该图的顶点数:"<<"请输入该图的边数:"<

cin>>G.vexnum>>G.arcnum;

for(i=0;i

{

G.vertices[i].data=i;

G.vertices[i].firstarc=NULL;

}

cout<<"请输入一条边的始点和终点:"<

for(k=0;k

{

cout<<"请输入第"<

cin>>v1>>v2;

i=v1; j=v2;

while(i<1||i>G.vexnum||j<1||j>G.vexnum)

{

cout<<"请输入第"<

cin>>v1>>v2;

i=v1; j=v2;

}

i--;j--;

ArcNode *p;

p=(ArcNode *)malloc(sizeof(ArcNode));

if(!p) return -1;

p->adjvex=j;

p->nextarc=G.vertices[i].firstarc;

p->info=NULL; G.vertices[i].firstarc=p;

G.vertices[i];

}

return 0;

}

2.初始化栈

int InitStack(SqStack &S)

{

S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));

if(!S.base) exit (-1);

S.top=S.base;

S.stacksize=STACK_INIT_SIZE;

return 0;

}

3.入栈

int Push(SqStack &S,SElemType e)

{

if(S.top-S.base>=S.stacksize)

{

S.base=(SElemType*)realloc(S.base,(S.stacksize+STAXKINCREME NT)*sizeof(SElemType));

if(!S.base) exit (-1);

S.top=S.base+S.stacksize;

S.stacksize+=STAXKINCREMENT; }

*S.top++=e;

return 0;

}

4.出栈

int Pop(SqStack &S,SElemType &e) {

if(S.top==S.base) return -1;

e=*--S.top;

return 0;

}

5.判断栈是否为空

int StackEmpty(SqStack S)

{

if(S.top==S.base) return -1;

else return 0;

相关文档
最新文档