图的邻接表存储表示(C)

 

//---------图的邻接表存储表示-------



#include<stdio.h>

#include<stdlib.h>



#define MAX_VERTEXT_NUM 20



typedef int InfoType;

typedef char VertextType;



typedef struct ArcNode

{

    int adjvex;

    struct ArcNode *nextArc;

    InfoType *info;

}ArcNode;



typedef struct VNode

{

    VertextType data;

    ArcNode *firstArc;

}VNode, AdjList[MAX_VERTEXT_NUM];



typedef struct

{

    AdjList verTices;

    int vexNum;

    int arcNum;

    int kind;

}ALGraph;



void CreateGraph(ALGraph *G);

void DisplayGraph(ALGraph *G);



int main()

{

    ALGraph *Graph = (ALGraph *)malloc(sizeof(ALGraph));

    CreateGraph(Graph);

    DisplayGraph(Graph);



    system("pause");

}



void CreateGraph(ALGraph *G)

{

    int i,j,k;

    ArcNode *arcNode;

    printf_s("请输入顶点数和边数:");

    scanf_s("%d,%d",&G->vexNum, &G->arcNum);



    //建立顶点表

    printf_s("建立顶点表\n");

    for (i = 0; i < G->vexNum; i++)

    {

        printf_s("请输入第%d个顶点:", i);

        fflush(stdin);//刷新缓冲区

        G->verTices[i].data = getchar();

        G->verTices[i].firstArc = NULL;

    }



    //建立边表

    printf_s("建立边表\n");

    for (k = 0; k < G->arcNum; k++)

    {

        printf_s("请输入(vi-vj)的顶点对序号");

        scanf_s("%d,%d", &i, &j);

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

        arcNode->adjvex = j;

        arcNode->nextArc = G->verTices[i].firstArc;//插入表头

        G->verTices[i].firstArc = arcNode;



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

        arcNode->adjvex = i;

        arcNode->nextArc = G->verTices[j].firstArc;//插入表头

        G->verTices[j].firstArc = arcNode;

    }

}



void DisplayGraph(ALGraph *G)

{

    int i;

    for (i = 0; i < G->vexNum; i++)

    {

        printf_s("%d->", i);

        while (G->verTices[i].firstArc != NULL)

        {

            printf_s("%d->", G->verTices[i].firstArc->adjvex);

            G->verTices[i].firstArc = G->verTices[i].firstArc->nextArc;

        }

        printf_s("\n");

    }

}

图的邻接表存储表示(C) 

请输入顶点数和边数:6,7

建立顶点表

请输入第0个顶点:0

请输入第1个顶点:1

请输入第2个顶点:2

请输入第3个顶点:3

请输入第4个顶点:4

请输入第5个顶点:5

建立边表

请输入(vi-vj)的顶点对序号0,1

请输入(vi-vj)的顶点对序号0,4

请输入(vi-vj)的顶点对序号1,4

请输入(vi-vj)的顶点对序号1,5

请输入(vi-vj)的顶点对序号2,3

请输入(vi-vj)的顶点对序号2,5

请输入(vi-vj)的顶点对序号3,5

0->4->1->

1->5->4->0->

2->5->3->

3->5->2->

4->1->0->

5->3->2->1->

请按任意键继续. . .

你可能感兴趣的:(存储)