关闭

邻接链表创建图

标签: 数据结构
505人阅读 评论(0) 收藏 举报
分类:

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》.
0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

邻接链表实现图

矩阵节约时间,链表节约空间
  • lzjsqn
  • lzjsqn
  • 2014-05-17 16:24
  • 790

图(3)——邻接链表法

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

邻接链表与图及其相关操作--Java

找了好久的关于图的邻接链表存储结构,这个是最满意的。一来方便自己以后查找使用,二来分享给大家。package Graph; import java.util.ArrayList; import ja...
  • Aguangg_6655_la
  • Aguangg_6655_la
  • 2017-04-18 22:03
  • 303

16 - 12 - 26 图的存储结构-邻接矩阵、邻接表、十字链表

一、邻接矩阵 二、邻接表 三、十字链表
  • SoDaoo
  • SoDaoo
  • 2016-12-21 11:59
  • 411

邻接表无向图 之 Java详解

邻接表无向图的介绍邻接表无向图是指通过邻接表表示的无向图。上面的图G1包含了”A,B,C,D,E,F,G”共7个顶点,而且包含了”(A,C),(A,D),(A,F),(B,C),(C,D),(E,G)...
  • qilixiang012
  • qilixiang012
  • 2015-08-18 10:43
  • 1334

图的邻接表数据结构的C++实现方法

图的邻接表表示方法采用链表的方式针对每个节点创建一个属于自己的链表,其中头指针为节点自身,其后的所有元素为与自己相连的其他节点,头结点只需记录节点的名字和序号,链表的其他节点还需记录两点之间边的权值,...
  • Alex123980
  • Alex123980
  • 2016-06-06 14:44
  • 2109

java图的邻接表实现两种方式及实例应用分析

本篇博客来谈一谈图的邻接表实现的两种方式,首先我们明确一点“学会图的邻接表实现的关键点在于“:你所建立的图的邻接表的对象是什么!首先我们看一下《算法导论》中关于图的邻接表的定义:图G=(V,E)的邻接...
  • feilong_csdn
  • feilong_csdn
  • 2017-04-05 20:26
  • 1472

数据结构之---C语言实现图的邻接表存储表示

数据结构之---C语言实现图的邻接表存储表示
  • u012965373
  • u012965373
  • 2015-07-15 00:34
  • 5245

数据结构:图(邻接表存储 c++实现)

#include #include #include using namespace std; #define MAXVEX 10 #define INFINITY 0XFFFFFFFF #d...
  • s634772208
  • s634772208
  • 2015-05-08 15:12
  • 8322

C++邻接表实现无向图、有向图

/*********************邻接表实现有向图******************/ //邻接表实现有向图缺点:只有出度,没有入度;解决方法:逆邻接表、十字链表 //边节点类 templ...
  • weixin_38044916
  • weixin_38044916
  • 2017-05-03 21:16
  • 785
    个人资料
    • 访问:25573次
    • 积分:448
    • 等级:
    • 排名:千里之外
    • 原创:22篇
    • 转载:1篇
    • 译文:0篇
    • 评论:4条
    最新评论