图的存储结构——邻接表

/*图的存储结构——邻接表*/
#include<stdio.h>
#include<stdlib.h>
#define MAXVEX 100      /*最大顶点数*/
typedef char VertexType;    /*顶点*/
typedef int EdgeType;   /*边上的权值*/
typedef struct EdgeNode     /*边表结点*/
{
    int adjvex;     /*邻接点域,存储该顶点对应的下标*/
    EdgeType weight;    /*用于存储权值,对于非网图可以不需要*/
    struct EdgeNode * next;     /*链域,指向下一个邻接点*/
}EdgeNode;

typedef struct VertexNode   /*顶点表结点*/
{
    VertexType data;    /*顶点表结点*/
    EdgeNode * firstedge;   /*边表头指针*/
}VertexNode,AdjList[MAXVEX];

typedef struct 
{
    AdjList adjList;
    int numVertexes,numEdge;    /*图中当前顶点数和边数*/
}GraphAdjList;

/*建立图的邻接表结构(无向图)*/
void GreateALGraph(GraphAdjList * G)
{
    int i,j,k;
    EdgeNode * e;
    printf("输入顶点数和边数:\n");
    scanf("%d%d",&G->numVertexes,&G->numEdge);      /*输入顶点数和边数*/
    for(i=0;i<G->numVertexes;i++)   /*读入顶点信息,建立顶点表*/
    {
        scanf(" %c",&G->adjList[i].data);   /*输入顶点信息*/
        G->adjList[i].firstedge=NULL;   /*将边表置空表*/
    }
    for(k=0;k<G->numEdge;k++)   /*建立边表*/
    {
        printf("输入边(Vi,Vj)上的顶点序号:\n");
        scanf("%d%d",&i,&j);    /*输入(Vi,Vj)上的顶点序号*/
        e=(EdgeNode *)malloc(sizeof(EdgeNode));     /*向内存申请空间,生成边表结点*/
        e->adjvex=j;    /*邻接序号为j*/
        e->next=G->adjList[i].firstedge;    /*将e指针指向当前顶点指向的结点*/
        G->adjList[i].firstedge=e;  /*将当前顶点的指针指向e*/ //(头插法)
        e=(EdgeNode *)malloc(sizeof(EdgeNode));     /*向内存申请空间,生成边表结点*/
        e->adjvex=i;    /*邻接序号为i*/
        e->next=G->adjList[j].firstedge;    /*将e指针指向当前顶点指向的结点*/
        G->adjList[j].firstedge=e;      /*将当前顶点的指针指向e*/ //(头插法)
    }
}

int main()
{
    return 0;
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值