结构体实现解析求助:Graph类型定义存疑
C语言Edge结构体与Graph类型解析
1. Edge结构体解析
typedef struct { int v; int w; } Edge; Edge EDGE(int, int);
- 这段代码定义了
Edge结构体,包含两个整型成员v和w,通常用来表示图中的一条边(比如v是起点顶点编号,w是终点顶点编号)。 - 下方的
Edge EDGE(int, int);是函数声明:该函数接收两个整数参数,返回一个Edge结构体实例,作用是快速创建并初始化一条边(内部实现一般会把参数赋值给v和w后返回结构体)。
2. Graph类型解析(重点)
typedef struct graph *Graph; Graph GRAPHinit(int);
这是C语言里**抽象数据类型(ADT)**的典型写法,核心目的是隐藏图的内部实现细节,只对外暴露操作接口:
typedef struct graph *Graph;拆解来看:struct graph是一个不完整类型声明——编译器此时仅知道存在这个结构体,但不清楚它的具体成员(实际的结构体定义会放在对应的.c文件中,不对外暴露)。- 把
struct graph *(指向该结构体的指针类型)起了别名Graph,使用者在代码里只需用Graph类型操作图,无需关心结构体内部结构。
Graph GRAPHinit(int);是初始化函数的声明:接收一个整数参数(一般是图的顶点总数),返回一个Graph类型的指针,也就是初始化完成的图实例指针,后续对图的所有操作(比如加边、遍历)都基于这个指针。
内容的提问来源于stack exchange,提问作者Calvince
相关产品推荐
相关产品推荐

