数据结构用c语言逆邻接表。
时间: 2023-07-27 19:33:27 浏览: 118
逆邻接表是一种用于存储有向图的数据结构,它与邻接表的原理相反,存储的是每个节点的入边信息。C语言实现逆邻接表的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#define MAXVEX 100 // 最大顶点数
// 定义边节点结构体
typedef struct EdgeNode
{
int adjvex; // 邻接点下标
struct EdgeNode *next; // 指向下一个邻接点的指针
}EdgeNode;
// 定义顶点节点结构体
typedef struct VertexNode
{
int data; // 顶点数据
EdgeNode *firstedge; // 指向邻接表第一个节点的指针
}VertexNode, AdjList[MAXVEX];
// 定义邻接表结构体
typedef struct
{
AdjList adjList; // 存储各个顶点的邻接表
int numVertexes; // 顶点数
int numEdges; // 边数
}Graph;
// 创建逆邻接表
void CreateInverseALGraph(Graph *G)
{
int i, j, k;
EdgeNode *e;
printf("请输入顶点数和边数:");
scanf("%d%d", &G->numVertexes, &G->numEdges);
printf("请输入顶点信息:\n");
for(i=0; i<G->numVertexes; i++)
{
scanf("%d", &G->adjList[i].data);
G->adjList[i].firstedge = NULL;
}
printf("请输入边的信息:\n");
for(k=0; k<G->numEdges; k++)
{
printf("请输入第%d条边的顶点序号:", k+1);
scanf("%d%d", &i, &j);
e = (EdgeNode*)malloc(sizeof(EdgeNode));
e->adjvex = i;
e->next = G->adjList[j].firstedge;
G->adjList[j].firstedge = e;
}
}
int main()
{
Graph G;
CreateInverseALGraph(&G);
return 0;
}
```
在上面的代码中,我们首先定义了边节点和顶点节点的结构体,然后定义了邻接表的结构体,包含了顶点数、边数以及存储各个顶点的邻接表。接着,我们使用CreateInverseALGraph函数创建逆邻接表。在该函数中,我们首先输入顶点数和边数,并初始化每个顶点的邻接表。然后,我们输入每条边的顶点序号,申请一个边节点,将其加入到邻接表中。最后,我们输出所创建的逆邻接表。
希望这个代码可以帮助到你。
阅读全文