数据结构邻接矩阵,邻接表,图实验报告

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

实验名称:数据结构实验五实验内容:1.使用邻接矩阵建立一个图,深度遍历。2.使用邻接表建立一个图,广度遍历。3.建立一个图,存储结构自己确定,并进行拓扑排序。

实验代码:

1.#include "stdio.h"

#define Infinity 100

#define MaxVertexNum 20

typedef enum {DG,DN,UDG,UDN} GraphKind;

typedef int VRType;

typedef char VertexType;

bool Visit[MaxVertexNum];

typedef struct ArcCell

{

VRType adj;

}ArcCell,AdjMatrix[MaxVertexNum][MaxVertexNum];

typedef struct

{

VertexType vexs[MaxVertexNum];

AdjMatrix arcs; //邻接矩阵

int vexnum,arcnum; //图的当前顶点数和弧数

GraphKind kind;

}MGraph;

int LocateVex(MGraph G,VertexType v)

{

for(int i=0;i

{

if(v==G.vexs[i])

return i;

}

if (i = G.vexnum)

printf("输入的顶点不合法\n");

return 0;

}

VertexType v1,v2;

VRType w;

void CreateUDG(MGraph &G)

{

int i,j,k;

printf("请输入顶点数:\n");

scanf("%d",&G.vexnum);

printf("请输入弧数:\n");

scanf("%d",&G.arcnum);

i = 0;

while(i

{

printf("请输入第%d个顶点\n",i);

getchar();

scanf("%c",&G.vexs[i]);

++i;

}

for(i=0;i

{

for(j=0;j

G.arcs[i][j].adj = 0;

}

for(k=0;k

{

printf("请输入一条边依附的顶点及权值(v1 v2 w)\n");

getchar();

scanf("%c %c %d",&v1,&v2,&w);

i =LocateVex(G,v1);

j =LocateVex(G,v2);

G.arcs[i][j].adj= w;

G.arcs[j][i] = G.arcs[i][j];

}

return;

}

void DFSTraverse(MGraph &G,int i)

{

printf("%c ",G.vexs[i]);

Visit[i]=true;

for(int j=0;j

{

if(G.arcs[i][j].adj==1&&!Visit[j])

{

DFSTraverse(G,j);

}

}

}

void DFS(MGraph &G)

{

int i;

for(i=0;i

for(i=0;i

{

if(!Visit[i])

{

DFSTraverse(G,i);

}

}

}

void main()

{

MGraph graph;

CreateUDG(graph);

printf("顶点集合为::");

for (int i=0;i

printf("%c ",graph.vexs[i]);

printf("\n深度遍历结果是:");

DFS(graph);

printf("\n");

return;

}

2.

#include "stdio.h"

#include "stdlib.h"

#define MaxVertexNum 20

typedef int InfoType;

typedef char VertexType;

typedef VertexType QElemType;

bool visited[MaxVertexNum];

typedef struct ArcNode

{

int adjvex; //该弧指向的顶点位置

struct ArcNode *nextarc; //指向下一条弧的指针

InfoType *info;

}ArcNode;

typedef struct VNode

{

VertexType data; //顶点信息

ArcNode *firstarc; //指向第一条依附该顶点的弧的指针}VNode,AdjList[MaxVertexNum];

typedef struct

{

AdjList vertices;

int vexnum,arcnum; //图的当前顶点数和弧数

}ALGraph;

typedef struct QNode

{

QElemType data;

struct QNode *next;

}QNode,*Queueptr;

typedef struct

{

Queueptr front;

Queueptr rear;

}LinkQueue;

void InitQueue(LinkQueue &Q)

{

Q.front = Q.rear = (Queueptr)malloc(sizeof(QNode));

if(!Q.front) return;

Q.front->next = NULL;

return;

}

void EnQueue(LinkQueue &Q,QElemType e)

{

Queueptr p = NULL;

相关文档
最新文档