图的邻接表存储表示示例讲解

 更新时间:2013年11月26日 09:36:40   作者:  
这篇文章主要介绍了图的邻接表存储表示,大家参考使用

复制代码 代码如下:

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

#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");
    }
}



复制代码 代码如下:

请输入顶点数和边数: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->
请按任意键继续. . .

相关文章

  • C++利用递归实现走迷宫

    C++利用递归实现走迷宫

    这篇文章主要为大家详细介绍了C++利用递归实现走迷宫,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-03-03
  • C语言实现类似wget的进度条效果

    C语言实现类似wget的进度条效果

    这篇文章主要介绍了C语言实现类似wget的进度条效果的方法,主要是让大家可以熟练的使用转移符\r,这里推荐给大家,需要的小伙伴参考下。
    2015-03-03
  • C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误的解决方法

    C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误的解决方法

    这篇文章主要介绍了C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-03-03
  • C语言入门之浮点数

    C语言入门之浮点数

    这篇文章主要为大家介绍了C语言的浮点数,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • 一文搞懂c++中的std::move函数

    一文搞懂c++中的std::move函数

    这篇文章主要介绍了c++中的std::move函数,在探讨c++11中的Move函数前,先介绍两个概念(左值和右值),对c++ std::move函数相关知识感兴趣的朋友一起看看吧
    2022-07-07
  • 一篇文章带你入门C语言:操作符

    一篇文章带你入门C语言:操作符

    这篇文章主要介绍了C语言中的运算符,文中讲解非常详细,适合初学小白进行学习,想入门C语言的朋友不妨了解下,希望能给你带来帮助
    2021-08-08
  • C++实现屏幕截图(全屏截图)

    C++实现屏幕截图(全屏截图)

    屏幕截图已经成为了所有IM即时通讯软件的必备模块,也是日常办公中使用最频繁的功能之一。今天我们从C++开发的角度,来看看屏幕截图的主要功能点是如何实现的,感兴趣的可以了解一下
    2021-11-11
  • C语言实现的阶乘,排列和组合实例

    C语言实现的阶乘,排列和组合实例

    这篇文章主要介绍了C语言实现的阶乘,排列和组合的方法,涉及C语言数学运算的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • C语言中的结构体的入门学习教程

    C语言中的结构体的入门学习教程

    这篇文章主要介绍了C语言中的结构体的入门学习教程,以struct语句定义的结构体是C语言编程中的重要基础,需要的朋友可以参考下
    2015-12-12
  • C++解决回调地狱问题的方法小结

    C++解决回调地狱问题的方法小结

    “地狱回调”(Callback Hell)是指在编程中使用过多嵌套回调函数,导致代码难以阅读和维护,本文给大家介绍了C++解决回调地狱问题的方法小结,文中有相关的代码示例供大家参考,需要的朋友可以参考下
    2024-07-07

最新评论