当前位置:   article > 正文

C语言数据结构学习笔记(17)-无向图的邻接表_请输入第1条边所对应的两个顶点:1请输入第2条边所对应的两个顶点:

请输入第1条边所对应的两个顶点:1请输入第2条边所对应的两个顶点:

/*
无向图的邻接表
输出结果
请输入待创建图的顶点数和边数:4 4
请输入第1个顶点信息:a
请输入第2个顶点信息:b
请输入第3个顶点信息:c
请输入第4个顶点信息:d
请输入第1条边的两个顶点对应的下标值:0 1
请输入第2条边的两个顶点对应的下标值:0 3
请输入第3条边的两个顶点对应的下标值:1 3
请输入第4条边的两个顶点对应的下标值:1 2
a (a,d) (a,b)
b (b,c) (b,d) (b,a)
c (c,b)
d (d,b) (d,a)
请按任意键继续. . .
*/
# include <stdio.h>
# include <stdlib.h>
# define MAX_VEX 100//最大顶点数
typedef char VertexType;
typedef int EdgeType;
//边表结点
typedef struct EdgeNode{
    int adjvex;//邻接点域,存储对应顶点元素的下标
    //EdgeType info;//储存权值,非网图则不需要
    struct EdgeNode * next;//指针域,指向下一个邻接点
}EdgeNode;
//顶点表结点
typedef struct VertexNode{
    VertexType data;//顶点数据域
    EdgeNode * firstedge;//边表头结点指针
}VertexNode, AdjList[MAX_VEX];
typedef struct GraphAdjList{
    AdjList adjlist;//顶点数组链接表
    int VexNum, EdgeNum;// 顶点、边的个数
}Graph;
void CreateGraphAdjList(Graph * G);//创建图的邻接表
void PrintGraphAdjList(Graph G);//打印图的邻接表
int main(void)
{
    Graph G;
    CreateGraphAdjList(&G);
    PrintGraphAdjList(G);
    system("pause");
    return 0;
}
//创建图的邻接表
void CreateGraphAdjList(Graph * G)
{    
    printf("请输入待创建图的顶点数和边数:");
    scanf("%d %d", &G->VexNum, &G->EdgeNum);
    for(int i = 0; i < G->VexNum; i++)
    {
        getchar();
        printf("请输入第%d个顶点信息:", i+1);
        scanf("%c", &G->adjlist[i].data);
        G->adjlist[i].firstedge = NULL;
    }
    int index1, index2;
    EdgeNode * pE;
    for(int j = 0; j < G->EdgeNum; j++)
    {    
        printf("请输入第%d条边的两个顶点对应的下标值:", j+1);
        scanf("%d %d", &index1, &index2);
        pE = (EdgeNode*)malloc(sizeof(EdgeNode));
        pE->adjvex = index2;
        pE->next = NULL;
        pE->next = G->adjlist[index1].firstedge;
        G->adjlist[index1].firstedge = pE;
        pE = (EdgeNode*)malloc(sizeof(EdgeNode));
        pE->adjvex = index1;
        pE->next = NULL;
        pE->next = G->adjlist[index2].firstedge;
        G->adjlist[index2].firstedge = pE;
    }
}
//打印图的邻接表
void PrintGraphAdjList(Graph G)
{
    for(int i = 0; i < G.VexNum; i++)
    {
        printf("%c ", G.adjlist[i].data);
        EdgeNode * p = G.adjlist[i].firstedge;
        while(p)
        {
            printf("(%c,%c) ", G.adjlist[i].data, G.adjlist[p->adjvex].data);
            p = p->next;
        }
        printf("\n");
    }
}

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/591934
推荐阅读
相关标签
  

闽ICP备14008679号