yp极简~邻接表(C++代码)

图节点

顶点数&边数

顶点表节点序列

顶点信息

边表头指针(指向边表节点)

边表节点

邻接点下标

权值

next域

#include<iostream>
using namespace std;

#define MAXVEX 100 /* 最大顶点数,应由用户定义 */
typedef char VertexType; /* 顶点类型应由用户定义 */
typedef int EdgeType; /* 边上的权值类型应由用户定义 */

//###边表节点
typedef struct EdgeNode{
    int adjvex;/* 邻接点域,存储该顶点对应的下标 */
    EdgeType weight;/* 用于存储权值,对于非网图可以不需要 */
    struct EdgeNode *next;/* 链域,指向下一个邻接点 */
}EdgeNode;

//##顶点表结点
typedef struct VexterNode{
    VertexType data;/* 顶点域,存储顶点信息 */
    EdgeNode *firstedge;/* 边表头指针 */
} VexterNode,AdjList[MAXVEX];

//#图节点
typedef struct{
    int numNodes,numEdges;/* 图中当前顶点数和边数 */
    AdjList adjList;
}GraphAdjList;

void CreateALGraph(GraphAdjList *Gp){
    int i,j,k;
    EdgeNode *pe;
    cout <<  "输入顶点数和边数(空格分隔):" << endl;
    cin >> Gp->numNodes >> Gp->numEdges;

    for(i = 0;i<Gp->numNodes;i++){
        cout <<  "输入顶点信息:" << endl;
        cin >> Gp->adjList[i].data;
        Gp->adjList[i].firstedge = NULL;/* 将边表置为空表 */
    }

    for(k = 0;k < Gp->numEdges; k++){/* 建立边表 */
       cout <<  "输入边(vi,vj)的顶点序号i,j(空格分隔):" << endl;
       cin>> i >> j;
       pe = (EdgeNode *)malloc( sizeof(EdgeNode));
       pe->adjvex = j;/* 邻接序号为j */
       /* 将pe的指针指向当前顶点上指向的结点 */
       pe->next = Gp->adjList[i].firstedge;//头插法
       Gp->adjList[i].firstedge = pe; /* 将当前顶点的指针指向pe */

       pe = (EdgeNode *)malloc( sizeof(EdgeNode));
       pe->adjvex = i;
       pe->next = Gp->adjList[j].firstedge
       Gp->adjList[j].firstedge = pe;
    }
}

int main(){
    GraphAdjList GL;
    CreateALGraph(&GL);

    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

.0-0.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值