#include<stdio.h>
#include<stdlib.h>
#define True 1 //定义True为1
#define FALSE 0 //定义FALSE为0
#define N 8 //定义节点个数N为8
typedef int VexType; //定义顶点类型int
int AdjMatrix[N][N] = //生成形状为N*N的邻接矩阵
{{0,1,1,0,0,0,0,0},
{1,0,0,1,1,0,0,0},
{1,0,0,0,0,1,1,0},
{0,1,0,0,0,0,0,1},
{0,1,0,0,0,0,0,1},
{0,0,1,0,0,0,1,0},
{0,0,1,0,0,1,0,0},
{0,0,0,1,1,0,0,0}};
typedef struct AdjNode //定义邻接点的结构体
{
int Adjvex; //int类型的数据域,储存顶点索引
struct AdjNode *next; //储存指向邻接节点的指针
}AL_AdjNode; //命名为AL_AdjNode
typedef struct //定义顶点的结构体
{
VexType vertex; //顶点数据类型的顶点数据域
AL_AdjNode *link; //储存指向邻接节点的指针
}AL_VexNode; //命名顶点结构体名字为AL_VexNode
void Creat_AdjList() //创建邻接表的函数
{
AL_VexNode VexList[N] = {0, NULL}; // 声明长度为N的顶点数组
int j; //定义变量
AL_AdjNode *Ptr,*nextPtr; //声明节点,用于声明新节点和当前节点的
for(int i = 0;i < N;i++) //对于从1到n的节点
{
VexList[i].vertex = i; //对数组的第i个位置的数据域赋值为i
VexList[i].link = NULL; //指针域赋值为空NULL
j = 0; //遍历邻接矩阵,用于遍历矩阵的列
while(j < N) //当列小于节点的最大数量时
{
if(AdjMatrix[i][j] != 0) //如果邻接矩阵中该点不为0
{
Ptr = (AL_AdjNode*)malloc(sizeof(AL_AdiNode)); //为指针开辟节点大小节点类型的空间
Ptr->adjvex = j; //其数据域赋值为j,当前列,也就是指针的数值
Ptr->next = NULL; //指针域指为空
if(VexList[i].link == NULL) //如果顶点的指针域为空
{
VexList[i].link = Ptr; //让顶点的指针域指向该节点
nextPtr = Ptr; //把当前指针指向当前节点
}
else //如果顶点的指针域不为空
{
nextPtr->next = Ptr; //把链上的最后一个节点域当前节点连接上
nextPtr = Ptr; //当前节点为链上最后一个节点
}
}
j++; //对于每列都要往后++
}
}
int main()
{
Creat_AdjList();
return 0;
}
1.邻接表的创建代码(如上)