typedef struct VNode{
VertexType data;
ArcNode *first;
}VNode,AdjList[MaxVertexNum];
在这段代码中,typedef struct VNode {...} VNode, AdjList[MaxVertexNum];
表示定义了两个类型别名。
首先,typedef struct VNode {...} VNode;
定义了一个结构体类型别名 VNode
,结构体包含了两个成员,一个是 VertexType
类型的 data
,另一个是指向 ArcNode
类型的指针 first
。
然后,AdjList[MaxVertexNum]
表示定义了一个数组类型别名 AdjList
,它是一个包含 MaxVertexNum
个元素的数组,每个元素的类型是 VNode
结构体。
所以,这段代码的作用是定义了两个类型别名,VNode
表示结构体类型的别名,AdjList
表示结构体数组类型的别名。通过这样的定义,可以更方便地使用 VNode
和 AdjList
来声明变量,而不需要每次写出完整的结构体或数组类型的名称。例如,可以使用 VNode node;
声明一个 VNode
类型的变量,或者使用 AdjList list;
声明一个 AdjList
类型的数组变量。
AdjList 被定义为 struct VNode 类型的数组,它的长度为 MaxVertexNum
一样的 都是结构体数组
VNode AdjList[MaxVertexNum];
因为头插法稍微拐了个弯,我之前也没搞明白,画个图就明白了
链表的头节点是指向下一个节点,因此在插入新节点时候,首先是把待插入节点指向头结点的下一个节点,然后再把头结点地址指向待插入节点。
如下,a是待插入节点,head是head的下一个节点。
a->next = head->next;
head->next = a;
当我们在C语言中使用typedef struct{}后再跟别称为数组时,这个语法的含义是定义了一个结构体类型,并使用typedef关键字给这个结构体类型定义了一个别名,也就是数组名。具体作用和意义是方便使用和书写代码,通过定义结构体类型和使用别名,在声明变量时可以直接使用别名代替结构体类型名称,同时也方便别的代码文件使用同一结构体类型和别名,提高代码复用性和可维护性。具体实现可以参考下面代码示例:
typedef struct {
int id;
char name[20];
int age;
} Student; // 定义了一个Student结构体类型,并设置id、name、age的成员变量
int main() {
Student stu_arr[10]; // 使用别名Student代替结构体名称定义数组
for(int i = 0; i < 10; i++) {
stu_arr[i].id = i + 1;
strcpy(stu_arr[i].name, "Tom");
stu_arr[i].age = 18;
}
return 0;
}