std::vector实现邻接链表
首先定义一个结构体,包括邻接结点和边权值,用来表示一条边:
struct Edge {
int nextNode;//下一个结点编号
int cost;//该边的权重
};
为每一个结点都建立一个单链表来保存与其相邻的边权值和结点的信息。使用vector来模拟这些单链表,利用如下语句为每一个结点都建立一个 vector对象(结点数量为N)。
vector<Edge> edge[N];
该语句建立了一个大小为N的数组,而数组中保存的元素即为Edge对象, 我们用edge[i]的vector来表示结点i建立的单链表。
为了使用vector还需在C++源文件头部添加相应的头文件。
#include <vector>
using namespace std; //声明使用标准命名空间
为这些“单链表”添加和删除信息:
for (int i = 0;i < N;i ++) {
//遍历所有结点
edge[i].clear(); //清空其单链表
}
对这些单链表进行初始化,即利用vector::clear()操作清空这些单链表。向其中添加信息时,调用vector::push_back(Edge)。如下所示:
Edge tmp; //准备一个Edge结构体
tmp.nextNode = 3; //下一结点编号为3
tmp.cost = 38; //该边权值为38
edge[1].push_back(tmp); //将该边加入结点1的单链表中
查询某个结点的