加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

【数据结构】邻接表的3种常用表示方式——C++描述

发布时间:2020-12-15 06:00:12 所属栏目:安全 来源:网络整理
导读:指针表示法 struct ArcNode //定义边表结点 { int adjvex; //邻接点域 ArcNode* next;}; struct VertexNode //定义顶点表结点 { int vertex; ArcNode* firstedge;}; //头插法 void add( int from , int to){ s = new ArcNode; s-adjvex = to; s-next = adjl

指针表示法

struct ArcNode  //定义边表结点
{
    int adjvex; //邻接点域
    ArcNode* next;
};

struct VertexNode   //定义顶点表结点
{
    int vertex;
    ArcNode* firstedge;
};

//头插法
void add(int from,int to)
{
    s = new ArcNode;
    s->adjvex = to;
    s->next = adjlist[i].firstedge;
    adjlist[from].firstedge = s;
}

vector表示法

vector<int> v[MAXN];

void add(int x,int y)
{
    v[x].push_back(y);
}

数组表示法

int head[MAXN]; //初始化为-1
int h = 0;
struct Edge
{
    int to;
    int next;
};

Edge e[MAXN<<1];

void add(int x,int y)
{
    e[h].to = y;
    e[h].next = head[x];
    head[x] = h++;
}

三种方法的简单比较

  1. 指针结构清晰,占用空间小,但是指针操作容易出错。
  2. vector简单明了,但仅限于顶点编号为1~N的情况,而且储存的信息量少,此外,如果数据量比较大,vector的操作会比较费时间。
  3. 数组表示法,实际上是模拟指针来实现的,既摆脱了令人头晕的指针,又有占用空间小、速度快的优势,强烈推荐!

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读