图邻接表有向表代码简洁实现

来源:互联网 发布:aframe.js下载 编辑:程序博客网 时间:2024/05/01 23:26

邻接表 有向表 1建一个表头数组[n]存放边表头
2 n个边表头数组存放每个边表信息
这里写图片描述

#include<stdio.h>#include<stdlib.h>#include<malloc.h>#define MAXNODE 100;#define LEN sizeof(ArcNode)int vexnum,arcnum;          //顶点个数 和弧的个数 struct ArcNode            //边表{    int  adjvex;           //存邻接点    ArcNode *next;};               //Arc 英文 弧typedef struct          //顶点表节点{    int vexdata;       //顶点信息    ArcNode *firstarc;   //指向头个接点的指针}VerNode;                   //vertex  英文  顶点void CreatAdjList(VerNode G[])     //建立有向图的邻接表存储结构{    int k,w,i,n,m=0;    printf("输入顶点个数 和信息");    scanf("%d",&n);      //输入个数    for(i=1;i<=n;i++)    {                                      //如果还想加存储数据 可以在这里泻进来        G[i].vexdata=i;                 //这个i其实就是点的名字 如果要变得话可以在这里改一下        G[i].firstarc=NULL;    }    scanf("%d %d",&k,&w);            //输入弧(k w)00结束    while(k!=0&&w!=0)    {  ArcNode *p;        p=(struct ArcNode*)malloc(LEN);         //先开一个空间        p->adjvex=w;                 //给他赋值 相当于第一个空格  用来保存邻接信息        p->next=G[k].firstarc;        //这一步和下一步 就是在第K个边表头插一个w节点         G[k].firstarc=p;        m++;                     //弧的个数+1        scanf("%d %d",&k,&w);    }    vexnum=n;arcnum=m;                    //n就是节点数 m就是弧长数}void PrintAdjList(VerNode G[]){   int i,n;                                 //n是统计邻接点个数      for( i=1;i<=vexnum;i++)      {  printf("%d:",G[i].vexdata);         n=0;          while(G[i].firstarc!=NULL)           {printf("->%d",G[i].firstarc->adjvex);          G[i].firstarc=G[i].firstarc->next;n++;}          printf("        邻接点个数是%d\n",n);      }}int main(){     VerNode G[100];    CreatAdjList(G);   //建立邻接表    PrintAdjList(G);   //打印邻接表    return 0;}

上图的结果

0 0
原创粉丝点击