• 图的邻接表存储


    邻接表是图的一种链式存储结构。

    在邻接表中,对图中的每一个定点建立一个单链表,第i个单链表中的结点表示依附于定点vi的边。

    每一个结点由三个域构成,表节点,头结点,还有存储图的。

    假设像构建下图的一个图的结构


    那么程序例如以下:

    #include<stdio.h>
    #include<stdlib.h>
    #define  MAXNUM 100
    typedef struct node   //边表节点
    {
       int adjvex;
       struct node* next;
    }EdgeNode;
    
    typedef struct     //顶点表节点
    {
       char vertex;
       EdgeNode* firstedge;
    }VertexNode;
    
    typedef struct
    {
        VertexNode adjlist[MAXNUM];
        int n,e;
    
    }ALGraph;
    void create(ALGraph* G)
    {
        int i,j,k,w,v;
        EdgeNode *s;
        printf("读入顶点数和边数");
        scanf("%d,%d",&G->n,&G->e);
    
    
       for (i=0;i<G->n;i++)
       {
           fflush(stdin);
           printf("建立顶点表");
           G->adjlist[i].vertex=getchar();
           G->adjlist[i].firstedge=NULL;
       }
       printf("建立边表
    ");
       for (k=0;k<G->e;k++)
       {
           printf("读入(vi-vj)的顶点对序号");
           scanf("%d,%d",&i,&j);
           s=(EdgeNode*)malloc(sizeof(EdgeNode));
           s->adjvex=j;
           s->next=G->adjlist[i].firstedge;  //插入表头
           G->adjlist[i].firstedge=s;
           s=(EdgeNode*)malloc(sizeof(EdgeNode));
           s->adjvex=i;
           s->next=G->adjlist[j].firstedge;
           G->adjlist[j].firstedge=s;
    
       }
    }
    int main()
    {
        int i;
        ALGraph* G= (ALGraph*)malloc(sizeof(ALGraph));
        create(G);
        for (i=0;i< G->n;i++)
        {
           printf("%d->",i);
           while(G->adjlist[i].firstedge!=NULL)
           {
                printf("%d->",G->adjlist[i].firstedge->adjvex);
                G->adjlist[i].firstedge=G->adjlist[i].firstedge->next;
    
           }
           printf("
    ");
        }
    }
    


  • 相关阅读:
    链表相交
    环路检测
    lambada表达式对集合的过滤和相互转换
    lambda表达式对集合的遍历
    centos7常用命令
    小程序文件
    扫码登录
    位操作
    使用json-lib转换对象为字符串时的特殊处理
    javac 编译异常总结
  • 原文地址:https://www.cnblogs.com/llguanli/p/8717082.html
Copyright © 2020-2023  润新知