数据结构——邻接表,c语言实现

时间:2025-03-26 12:38:59
  • #include<>
  • #include<>
  • #define MVNum 100
  • //边表
  • typedef struct ArcNode
  • {
  • int adjvex;//该边另一条结点位置
  • struct ArcNode* nextarc;//指向下一条边的指针
  • int weight;//权值
  • }ArcNode;
  • //顶点
  • typedef struct VNode
  • {
  • int date;//当前顶点信息
  • ArcNode* firstarc;//指向第一条边依附的指针
  • }VNode,AdjList[MVNum];
  • //邻接表
  • typedef struct
  • {
  • AdjList vertices;//存放顶点信息的数组
  • int vexnum, arcnum;//存放当前顶点数和弧数
  • }ALGraph;
  • //定位函数
  • int LocateVex(ALGraph G, char v)
  • {
  • for (int i = 0; i < ; i++)
  • {
  • if ([i].date == v)
  • return i;
  • }
  • }
  • //创建
  • void Create(ALGraph& G)
  • {
  • int i, k;
  • printf("输入总顶点数和边数:\n");
  • scanf("%d%d",&, &);//输入总顶点数和边数
  • printf("分别输入各个顶点的值:\n");
  • for (i = 0; i < ; i++)
  • {
  • scanf("%d", &[i].date);//输入顶点值
  • [i].firstarc = NULL;//初始化指针域为空
  • }
  • printf("分别输入各条边连接的两个顶点:\n");
  • for ( k = 0; k < ; k++)
  • {
  • int i, j, v1, v2;
  • scanf("%d%d", &v1, &v2);
  • //定位输入结点的位置
  • i = LocateVex(G, v1);
  • j = LocateVex(G, v2);
  • //指向该结点
  • ArcNode* p1 = (ArcNode*)malloc(sizeof(ArcNode));
  • p1->adjvex = j;//将输入结点的位置赋值给p1
  • //连接结点
  • p1->nextarc = [i].firstarc;//p1的下一边的位置为顶点的第一条依附指针
  • [i].firstarc = p1;//当前顶点的依附指针指向p1
  • //相互指向,无向网
  • ArcNode* p2 = (ArcNode*)malloc(sizeof(ArcNode));
  • p2->adjvex = i;
  • p2->nextarc = [j].firstarc;
  • [j].firstarc = p2;
  • }
  • }
  • //输出表
  • void print(ALGraph& G)
  • {
  • printf("\n");
  • printf("输出邻接表:\n");
  • ArcNode* p;
  • for (int i = 0; i < ; i++)
  • {
  • printf("顶点%d:\n", [i].date);
  • for (p=[i].firstarc;p;p=p->nextarc)
  • {
  • printf(" 连接边的下标位置:(%d)", p->adjvex);
  • }
  • printf("\n");
  • }
  • }
  • int main()
  • {
  • ALGraph G;
  • Create(G);
  • print(G);
  • return 0;
  • }