图的邻接表存储表示示例讲解_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");
    }
}



复制代码 代码如下:

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

时间: 2024-08-05 08:39:20

图的邻接表存储表示示例讲解_C 语言的相关文章

C++实现图的邻接表存储和广度优先遍历实例分析_C 语言

本文实例讲述了C++实现图的邻接表存储和广度优先遍历方法.分享给大家供大家参考.具体如下: 示例:建立如图所示的无向图 由上图知,该图有5个顶点,分别为a,b,c,d,e,有6条边. 示例输入(按照这个格式输入): 5 6 abcde 0 1 0 2 0 3 2 3 2 4 1 4 输入结束(此行不必输入) 注:0 1表示该图的第0个顶点和第1个定点有边相连,如上图中的a->b所示       0 2表示该图的第0个顶点和第2个定点有边相连,如上图中的a->c所示       2 3表示该图的

图的邻接表存储结构

程序调用入口: using System; namespace Graphic_AdjacencyList { internal class Program { private static void Main(string[] args) { var adjacencyList = new AdjacencyList<char>(); Console.WriteLine("1.初始化树结构:"); Console.WriteLine("=============

在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为?

问题描述 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? 在图采用邻接表存储时,求最小生成树的Prime算法的时间复杂度为? A o(n^2) B o(n^3) C o(n) D o(n+e) 答案是o(n+e)...不理解..求过程 解决方案 不对,这题应该选A 求顶点的入度的时间复杂度为O(e)*n=O(n*e) 遍历顶点的时间复杂度是O(n^2) 相加是O(n^2+n*e)=O(n^2) 解决方案二: 详细的解释http://www.cskaoyan.com/redir

图的邻接表存储 c实现

图的邻接表存储 c实2011-10-07 10:34 4047人阅读 评论(2) 收藏 举报 存储cstruct数据结构null编程   用到的数据结构是 一个是顶点表,包括顶点和指向下一个邻接点的指针 一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针 刚开始的时候把顶点表初始化,指针指向null.然后边表插入进来,是插入到前一个,也就是直接插入到firstedge指向的下一个,而后面的后移   [cpp] view plaincopyprint? #define  Ma

C语言 基本语法示例讲解_C 语言

C 基本语法 我们已经看过 C 程序的基本结构,这将有助于我们理解 C 语言的其他基本的构建块. C 的令牌(Tokens) C 程序由各种令牌组成,令牌可以是关键字.标识符.常量.字符串值,或者是一个符号.例如,下面的 C 语句包括五个令牌: printf("Hello, World! \n");  这五个令牌分别是: printf ( "Hello, World! \n" ) ;  分号 ; 在 C 程序中,分号是语句结束符.也就是说,每个语句必须以分号结束.它

C语言嵌入informix基础入门示例讲解_C 语言

复制代码 代码如下: #include <stdio.h>#include <string.h>#include <stdio.h>#include <sqlca.h> $struct _db_person{    char   name[30+1];    char   card[12+1];    int    age;}; char *trim(char *str){    char *p, *buffer;    int  len;     if(

数据结构实践——操作用邻接表存储的图

本文是针对[数据结构基础系列(7):图]的实践. [项目 - 操作用邻接表存储的图] 假设图G采用邻接表存储,分别设计实现以下要求的算法: (1)输出出图G中每个顶点的出度: (2)求出图G中出度最大的一个顶点,输出该顶点编号: (3)计算图G中出度为0的顶点数: (4)判断图G中是否存在边<i,j>. 利用下图作为测试用图,输出结果. 提示:(1)分别设计函数实现算法:(2)不要全部实现完再测试,而是实现一个,测试一个:(3)请利用图算法库. [参考解答] #include <stdi

关键路径:php实现图的邻接表,关键路径,拓朴排序

<?php//调用require 'algraph.php';$a = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');$e = array('ab'=>'3', 'ac'=>'4', 'be'=>'6', 'bd'=>'5', 'cd'=>'8', 'cf'=>'7', 'de'=>'3', 'eg'=>'9', 'eh'=>'4', 'fh'=>'6', 'gj'=>

【算法导论】邻接表存储的拓扑排序

        上一篇文章中讲述了用邻接矩阵存储的图的拓扑排序,下面本文介绍用邻接表存储的图的拓扑排序.         关于拓扑排序的概念及基本思想,我在上一篇文章中已经较为详细的描述了,这里不在介绍.我们知道利用邻接矩阵进行拓扑排序时,程序实现较为简单,但是效率不高,算法的复杂度为O(n^3).而利用邻接表会使入度为0的顶点的操作简化,从而提高算法的效率. 在邻接表存储结构中,为了便于检查每个顶点的入度,可在顶点表中增加一个入度域(id),这样的邻接表如下图所示,这样只需对由n个元素构成的顶