图的邻接表存储方式的建立

图的邻接表存储方式,主要由表节点与头结点组成。

头结点中主要包含两个域:

1)存放顶点信息
2)存放与顶点相连的第一个表节点的指针

表节点中主要包含两个域:

1)存放相连的节点的序号
2)指向下一个节点的指针

#define MAXNUM 100;

//表节点
typedef struct ArcNode{
    int adjvex;//邻接顶点编号
    struct ArcNode *next;//下一邻接顶点
    }ArcNode;

//头结点
typedef struct AdjList{
    char vdata;//头结点数据信息
    ArcNode *firstarc;    //指向邻接表的第一个表节点
    }AdjList;
//图
typedef struct Digraph{
    int n,e;//表示图中节点数和边数
    AdjList Head[MAXNUM];//用数组存储头结点
    }Digraph;
//创建无向图的邻接表标示法
void CreatALJGraph(Digraph *G)
    {
     int i,j,k;
     char a;
     ArcNode *s;
     cout<<"输入节点数和边数: "<<endl;//有向图与无向图的边数不同
     cin>>i>>j;
     G->e=j;
     G->n=i;
     cout<<"输入节点信息:"<<endl;
     //建立头结点
     for(int k=0;k<G->n;k++)
         {
          cin>>a;
          G->Head[k].vdata=a;
          G->Head[k].firstarc=NULL;
         }
     //建立表节点
     for(int t=0;t<G->e;t++)
         {
          cin>>i>>j;//读入边(vi,vj)的顶点对序号
          s=(ArcNode*)malloc(sizeof(ArcNode));
          s->adjvex=j;
          s->next=G->Head[i].firstarc;
          G->Head[i].firstarc=s;
          //无向图需要两个顶点都连接,而有向图则只需连接一次即可。
          //等同于头插法建立链表
          s=(ArcNode*)malloc(sizeof(ArcNode));
          s->adjvex=i;
          s->next=G->Head[j].firstarc;
          G->Head[j].firstarc=s;
         }    

    }
时间: 2024-10-03 16:12:23

图的邻接表存储方式的建立的相关文章

数据结构(10) -- 图的邻接表存储

////////////////////////////////////////////////////////// //图的邻接表存储 ////////////////////////////////////////////////////////// #include <iostream> #include <stdlib.h> using namespace std; //图的邻接表表示法 #define MaxVertexNum 100 enum GraphType{DG,

数据结构之---C语言实现图的邻接表存储表示

// 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_NAME 3 // 顶点字符串的最大长度+1 #define MAX_VERTEX_NUM 20 typedef int InfoType; // 存放网的权值 typedef char VertexType[MAX_NAME]; // 字符串类型 typedef enum{DG, DN, AG

图的邻接表存储

图的邻接表存储 struct Edge { int v; ll w; Edge *next; };Edge e[maxn*10]; void add_edge(int u,int v,ll w) ///插入邻接表的首部而非尾部,避免遍历 { Edge *pre=&e[u]; Edge *p=(Edge*)malloc(sizeof(Edge)); p->v=v;p->w=w; p->next=pre->next; pre->next=p; } //遍历 for(Edg

_DataStructure_C_Impl:图的邻接表存储

#include<stdio.h> #include<stdlib.h> #include<string.h> //图的邻接表类型定义 typedef char VertexType[4]; typedef char InfoPtr; typedef int VRType; #define INFINITY 10000 //定义一个无限大的值 #define MaxSize 50 //最大顶点个数 typedef enum{DG,DN,UG,UN}GraphKind;

图的邻接表存储c实现(DFS遍历)

先简要列出实现过程中所需要的数据结构. 如下图 对于这个图而言,它的邻接表可以这样表示,当然表现形式可以多样,这只是我随便画的一种表示方法. 顶点表                                          边表 我们把第一个表即上面标着fixedvex的这个表称作顶点表,后边的称为边表. 上图所示,边表的结构应该这样写: //定义一个边表节点的结构 typedef struct node{ int adjvex; //int Mark; //用于标记是否被访问过 nod

图的邻接表存储表示,图的深度优先和广度优先遍历

1 #include<stdio.h> 2 #include<stdlib.h> 3 4 #define MAX_VERTAX_SIZE 20 5 #define OK 1 6 #define ERROR 0 7 8 typedef int Status; 9 typedef char ElemType; 10 11 typedef struct EageNode{ 12 int adjacentVertax; 13 struct EageNode* nextAdjacentVer

图的邻接表表示、广度优先、深度优先搜索

图,就是我们在数据结构中学到的图,它是一种存储信息的结构.图是一类在实际应用中非常常见的数据结构,当数据规模大到一定程度时,如何对其进行高效计算即成为迫切需要解决的问题.最常见的大规模图数据的例子就是互联网网页数据,网页之间通过链接指向形成规模超过500 亿节点的巨型网页图.再如,Facebook 社交网络也是规模巨大的图,仅好友关系已经形成超过10 亿节点.千亿边的巨型图,考虑到Facebook 正在将所有的实体数据节点都构建成网状结构,其最终形成的巨型网络数据规模可以想见其规模.要处理如此规

图(邻接表)

我们先来看一个图 我们想将这个图的信息存储到邻接表中,我们需要一个数组保存节点信息,还要有一个节点用来保存与该节点相邻的节点信息. 1 typedef struct arc_node 2 { 3 int pos; 4 int distance; 5 struct arc_node * next; 6 } Arc_node;//保存Node节点的相邻节点信息 7 8 typedef struct node 9 { 10 node_type info; 11 Arc_node * next; 12

数据结构(11) -- 邻接表存储图的DFS和BFS

/////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS /////////////////////////////////////////////////////////////// #include <iostream> #include <stdlib.h> #include <queue> using namespace std; //图的邻接表表示法