数据结构常见存储方式c语言

发布时间 2023-12-05 17:16:53作者: 老家伙2004

 

图---邻接矩阵

/*图的邻接矩阵存储表示法*/
//用两个数组分别存储顶点表和邻接矩阵
#define MaxInt 32767  //表示极大值,即无穷
#define MVNum 100  //最大顶点数
typedef char VerTexType;  //假设顶点的数据类型为字符型
typedef int ArcType;    //假设边的权值类型为整型
typedef struct
{
    VerTexType vexs[MVNum];    //顶点表
    ArcType arcs[MVNum][MVNum];    //邻接矩阵
    int vexnum, arcnum;    //图的当前顶点数和边数
}AMGraph;

 

图---邻接表

/*图的邻接表的存储定义*/
//弧的结点结构
#define MVNum 100    //最大的顶点数
typedef struct ArcNode
{
    int adjvex;    //该边所指的顶点的位置
    struct ArcNode* nextarc;    //指向下一条边的指针
    OtherInfo info;    //和边相关的信息
}ArcNode;
//顶点的结点结构
typedef struct VNode
{
    VertexType data;//顶点信息
    ArcNode* firstarc;//指向第一条依附该顶点的边
}VNode,AdjList[MVNum];//AdjList表示邻接表类型
//AdjList v相当于VNode v[MVNum]

//图的结构定义(邻接表)
typedef struct
{
    AdjList vertices;//vertices是vertex的复数
    int vexnum, arcnum;//图的当前顶点数和边数
}ALGraph;

/*说明*/
ALGraph G;//定义了邻接表表示的图G
G.vexnum = 5;G.arcnum = 6;//图G包含了5个顶点和6条边
G.vertices[1].data = 'v2';//图G中第2个顶点是v2
p = G.vertices[1].firstarc;//指针p指向顶点v2的第一个边结点
p->adjvex = 4;//p指针所指边结点是到下标为4的结点的边