邻接表建立的代码

这篇文章详细介绍了如何使用C语言定义和构建邻接表来表示图的数据结构,包括ArcNode(边节点)和VNode(顶点节点)的定义,以及ALGraph(图的结构)的实现,涵盖了最大顶点数、边的信息和其他相关信息的存储。

邻接表建立的代码

//边的结点结构
#define MVNum 100 //最大顶点数
typedef struct ArcNode{
     int adjvex;  //该边所指向的顶点的位置 
     struct ArcNode *nextarc;//指向下一条边的指针 
     Otherinfo info;  //和边相关的信息 
}ArcNode;

//顶点的结点结构 
typedef struct VNode{
     VerTexType data;//顶点信息、
     ArcNode *firstarc;//指向第一条依附该顶点的边的指针 
}VNode,AdjList[MVNum];//AdjList表示邻接表类型

//图的结构定义 
typedef struct{
     AdjList vertices; //定义一个数组vertices,是vertex的复数形式
     int vexnum,arcnum; //图的当前顶点数和弧数
}ALGraph;

使用邻接表建立有向图可以使用数组 + 链表的方式创建。以下是具体步骤和代码示例: ### 定义顶点表和边表 首先要定义顶点表和边表的结构。顶点表中的每个元素包含顶点的数据和指向其第一条边的指针,边表中的每个节点包含邻接顶点的序号和指向下一条边的指针。 ### 输入顶点信息 通过循环输入每个顶点的数据,并将其存储在顶点表中,同时将每个顶点的第一条边指针初始化为空。 ```cpp #include <iostream> using namespace std; // 定义边表节点 struct ArcNode { int adjvex; // 邻接顶点的序号 ArcNode* nextarc; // 指向下一条边的指针 }; // 定义顶点表节点 struct VNode { char data; // 顶点的数据 ArcNode* first_arc; // 指向第一条边的指针 }; // 定义图的结构体 struct ALGraph { int n; // 顶点数 VNode* adj_list; // 顶点表 }; // 创建有向图 void CreateDG(ALGraph& graph) { cout << "请输入图的总顶点数: "; cin >> graph.n; graph.adj_list = new VNode[graph.n]; char c; for (int i = 0; i < graph.n; ++i) { cout << "请输入第 " << i + 1 << " 个顶点信息: "; cin >> c; graph.adj_list[i].data = c; graph.adj_list[i].first_arc = nullptr; } int m; cout << "请输入图的总边数: "; cin >> m; for (int k = 0; k < m; ++k) { cout << "输入第 " << k + 1 << " 条边的信息:" << endl; cout << "输入边依附的第一个顶点: "; char v1; cin >> v1; cout << "输入边依附的第二个顶点: "; char v2; cin >> v2; // 确定 v1,v2 在图中的位置 int i, j; for (i = 0; i < graph.n; ++i) { if (graph.adj_list[i].data == v1) break; } for (j = 0; j < graph.n; ++j) { if (graph.adj_list[j].data == v2) break; } ArcNode* p = new ArcNode; p->adjvex = j; p->nextarc = graph.adj_list[i].first_arc; graph.adj_list[i].first_arc = p; } } // 打印有向图的邻接表 void PrintDG(ALGraph& graph) { for (int i = 0; i < graph.n; ++i) { cout << graph.adj_list[i].data << ": "; ArcNode* p = graph.adj_list[i].first_arc; while (p) { cout << graph.adj_list[p->adjvex].data << " "; p = p->nextarc; } cout << endl; } } int main() { ALGraph graph; CreateDG(graph); PrintDG(graph); return 0; } ``` ### 输入边信息 输入每条边所依附的两个顶点,确定这两个顶点在顶点表中的序号。然后创建一个新的边表节点,将邻接顶点的序号存储在该节点中,并将其插入到起始顶点的边表头部。 ### 代码解释 - 上述代码中,`CreateDG` 函数用于创建有向图,首先输入顶点数和顶点信息,然后输入边数和每条边的信息,最后将边插入到相应顶点的边表中。 - `PrintDG` 函数用于打印有向图的邻接表,方便查看图的结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值