数据结构图的存储结构及基本操作

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

1.实验目的

通过上机实验进一步掌握图的存储结构及基本操作的实现。

2.实验内容与要求

要求:

⑴能根据输入的顶点、边/弧的信息建立图;

⑵实现图中顶点、边/弧的插入、删除;

⑶实现对该图的深度优先遍历;

⑷实现对该图的广度优先遍历。

备注:单号基于邻接矩阵,双号基于邻接表存储结构实现上述操作。

3.数据结构设计

逻辑结构:图状结构

存储结构:顺序存储结构、链式存储结构

4.算法设计

#include

#include

#include

#define MAX_VERTEX_NUM 20 typedef struct ArcNode

{

int adjvex;

struct ArcNode *nextarc; }ArcNode;typedef struct VNode

{

char data[2]; //顶点就设置和书上V1等等一样吧

ArcNode *firstarc;

}VNode,AdjList[MAX_VERTEX_NUM]; typedef struct

{

AdjList vertices;

int vexnum,arcnum;

}ALGraph;

typedef struct

{

int data[MAX_VERTEX_NUM+10];

int front;

int rear;

}queue;

int visited[MAX_VERTEX_NUM]; queue q;

int main()

{

ALGraph G;

int CreateUDG(ALGraph &G);

int DeleteUDG(ALGraph &G);

int InsertUDG(ALGraph &G);

void BFSTraverse(ALGraph G, int (*Visit)(ALGraph G,ArcNode v));

int PrintElement(ALGraph G,ArcNode v);

void menu();

void depthfirstsearch(ALGraph *g,int vi);

void travel(ALGraph *g);

void breadfirstsearch(ALGraph *g);

int i;

G.arcnum = G.vexnum = 0;

while(1)

{

menu();

do

{

printf ( "请输入要进行的操作\n" );

scanf ("%d",&i);

if (i<1||i>6)

printf("错误数字,请重新输入\n");

}while (i<1||i>6);

switch (i)

{

case 1: CreateUDG(G);

system("pause"); system("cls"); break;

case 2: DeleteUDG(G); system("pause"); system("cls"); break;

case 3: InsertUDG(G); system("pause"); system("cls"); break;

case 4: travel(&G); system("pause"); system("cls"); break;

case 5: breadfirstsearch(&G); system("pause"); system("cls"); break;

case 6: exit(0); break;

}

}

return 1;

}

void enterqueue(int v)

{

q.data[q.rear]=v;

q.rear++;

}

int deletequeue()

{

int t;

t=q.data[q.front];

q.front++;

return(t);

}

int empty()

{

if(q.front==q.rear)

return 1;

return 0;

}

int LocateVex(ALGraph G,char node[2]) {

int i;

for(i = 0 ; i < G.vexnum ; i++)

{

if(strcmp(G.vertices[i].data,node)= =0)

return i;

}

return -1;

}

int CreateUDG(ALGraph &G)

{

int LocateVex(ALGraph G,char node[2]);

void PrintUDG(ALGraph G);

int i,j,k;

char node1[2],node2[2];

ArcNode *p,*q;

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

printf("例如:5,6\n");

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

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

for(i = 0 ; i < G.vexnum ; i++)

{

printf("第%d个\n",i+1);

scanf("%s",&G.vertices[i]);

G.vertices[i].firstarc = NULL;

}

//这里开始构造边

printf("请输入边的信息\n");

printf("例如:v1 v2\n");

for(i = 0 ; i < G.arcnum ; i++)

{

printf("第%d条边\n",i+1);

scanf("%s %s",&node1,&node2);

j = LocateVex(G,node1);

k = LocateVex(G,node2);

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

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

p->adjvex = k;

q->adjvex = j;

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

G.vertices[j].firstarc = p;

q->nextarc = G.vertices[k].firstarc;

G.vertices[k].firstarc = q;

}

相关文档
最新文档