图--->邻接表

邻接表 有向表 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;
}

上图的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值