复试训练——图论—— 预备知识

      谈到邻接链表,读者可能对邻接链表产生恐惧。我们可以使用标准模板库(STL)中的标准模板std:vector。接下来,了解一下vector在实现邻接链表的应用。

首先定义一个结构体,包括邻接结点和边的权值,用来表示一条边。

struct Edge{
    int nextNode;
    int cost;
}

我们为每个结点都建立了一个单链表来保存与其相邻的边的权值和结点信息。使用vector来模拟这些单链表,利用下面的语句为每个结点建立一个vector对象。

vector <Edge> edge[N];

使用vector对象,添加头文件.

#include <vector>
using namespace std;

利用vector::clear();操作清空这些单链表。

for(int i=0;i<N;i++){
    edge[i].clear();
}

在单链表添加和删除信息。

添加信息:

Edge tmp;
tmp.nextNode=3;
tmp.cost=38;
edge[i].push_back(tmp);

查询某个结点所有邻接信息时,对vector遍历。

for(int i=0;i<edge[2].size();i++){
    int nextNode=edge[2][i].nextNode();
    int cost=edge[2][i].cost;
}

当删除某个结点的边的信息,则调用vector::erase.

若要删除结点1的单链表中edge[1][i]所对应边的信息时,使用如下语句

edge[1].erase(edge[1].begin()+i,edge.end()+i+1);

 

转载于:https://my.oschina.net/u/1996306/blog/831181

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值