邻接链表创建图

原创 2016年08月28日 17:33:30

typedef char VertexType[MAX_VEX];
typedef struct ArcNode
{
    int adjvex;
    struct node *nextarc;
}ArcNode;

typedef struct VexNode
{
    VertexType vertex;
    ArcNode *firstedge;
}VertexNode,AdjList[MAX_VEX];

typedef struct
{
    AdjList vertices;
    int vexnum,arcnum;
    int kind;
}ALGraph;

int LocateVex(ALGraph *G,VertexType u)
{
    int i;
    for(i=0;i<G->vexnum;i++)
        if(strcmp(u,G->vertices[i].vertex)==0)
           return i;
    return -1;
}

void Display(ALGraph *G)
{
    int i = 0;
    ArcNode *p;
    for(i=0;i<G->vexnum;i++)
    {
        p = G->vertices[i].firstedge;
       // printf("The adjvex is :%d",p->adjvex);
        printf("%s",G->vertices[i].vertex);
        while(p)
        {
            printf("->%s",G->vertices[p->adjvex].vertex);
            p=p->nextarc;
        }
        printf("\n");
    }
}

int create(ALGraph *G)
{
    int i,j,k,m;
    VertexType va,vb;
    ArcNode *p;
    printf("please input the number of vex and edge\n");
    scanf("%d %d",&G->vexnum,&G->arcnum);
    printf("please input vertex table\n");
    for(i=0;i<G->vexnum;i++)
    {
        fflush(stdin);
        printf("The vertex is:");
        scanf("%s",G->vertices[i].vertex);
        G->vertices[i].firstedge = NULL;
    }
    printf("please input the edge table\n");
    for(j=0;j<G->arcnum;j++)
    {
        printf("\ninput arc(vi-vj):");
        scanf("%s%s",&va,&vb);
        k = LocateVex(G,va);
        m = LocateVex(G,vb);
        printf("k,m is %d,%d",k,m);
        p = (ArcNode*)malloc(sizeof(ArcNode));
        if(!p)
            exit(-1);
        p->adjvex = m;
        p->nextarc = G->vertices[k].firstedge;
        G->vertices[k].firstedge = p;
        p = (ArcNode*)malloc(sizeof(ArcNode));
        p->adjvex = k;
        p->nextarc = G->vertices[m].firstedge;
        G->vertices[m].firstedge = p;
    }

    return 0;
}

int main(int argc,char** argv)
{
    ALGraph g;
    create(&g);
    Display(&g);
    return 0;
}

参考严蔚敏《数据结构C》.
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

图(3)——邻接链表法

邻接链表法 基本思想:对图的每个顶点建立一个单链表,存储该顶点所有邻接顶点及其相关信息。每一个单链表设一个表头结点。 第i个单链表表示依附于顶点Vi的边(对有向图是以顶点Vi为头或尾的弧)...

一步一步学数据结构之n--n(图--邻接链表法实现)

在上篇文章已经介绍过图的内容,而且还介绍了用邻接矩阵实现的图,而在本篇文章,就说下用邻接链表实现的图。        常做的操作可以在上篇文章中查找,因为两中方法实现的图操作都是一模一样的。 代码总...

图的深度优先遍历,基于邻接链表的非递归实现

测试数据基于上图,新增4->1的路径。程序存在内存泄漏。 使用时可以修改depth_first_search第二个参数,指定开始遍历的结点。如果错误,欢迎指正!! #include #include...

用邻接链表存储无向图和有向图

上一篇文章我们说到用邻接矩阵存储有向图和无向图,这种方法的有点是很直观的知道点与点之间的关系,查找的复杂度是为O(1)。但是这种存储方式同时存在着占用较多存储空间的问题, 邻接矩阵存储很好理解,但是...

C++图:极简版的图类(邻接链表)

建立一个(极简版的)图类(邻接链表)。

【二十六】图的存储结构--邻接链表法

1、邻接链表法 基本思想:示例: 2、数据结点定义3、算法实现数据类型声明/* * 邻接链表法,数据结构定义 */ typedef struct _struct_lgraph { int ...
  • CMbug
  • CMbug
  • 2015-08-12 09:32
  • 475

JAVA实践图的存储结构---邻接表(利用链表)

前言关于邻接表,实现过一次数组版本的。 http://blog.csdn.net/xubaifu1997/article/details/51984760虽然会写了,也感觉略绕,所以尝试用了自带的链...

7.2图的存储结构(十字链表、邻接多重表、边集数组)

7.2图的存储结构(十字链表、邻接多重表、边集数组)
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)