zoukankan      html  css  js  c++  java
  • 2019/8/1 前向星与链式前向星

        前向星与链式前向星

      前向星与链式前向星两种相似却略有不同的数据结构,主要用途是存储给定图(图论问题)。

      存图方法

      主要方法有以下几种:

    • 邻接表

    • 邻接矩阵

    • vector

    • 前向星

    • 链式前向星

      前面三种交给亲爱的冯老师(我跟vector有仇) 

      ------>冯老师

      这次我们来探讨前向星与他的好兄弟---------链式前向星。

      前置知识

    • 图论相关

    • 基本数据结构(struct)

    • 指针(链表)

      1.前向星

      “一种数据结构,以储存边的方式来存储图。构造方法如下:读入每条边的信息,将边存放在数组中,把数组中的边按照起点顺序排序(可以使用基数排序,如下面例程),前向星就构造完了。通常用在点的数目太多,或两点之间有多条弧的时候。一般在别的数据结构不能使用的时候才考虑用前向星。除了不能直接用起点终点定位以外,前向星几乎是完美的。”------百度百科

      结构:  

      前向星是一种通过存储边来存储图的数据结构,主要部分如下:

      1.起点

      2.终点

      3.边权值

      原理/实现方法:

      1.输入边信息(起/止/权值)

      2.将边以起点为关键字排序,以实现同一起点的边储存在同一区间并且相邻。(遍历时更加方便快速)

      优点:

      1.见引用部分。

      缺点:

      1.不能依据起点/终点直接获得边信息。

      实际使用:

      基本从来从来从来都不会用到(因为有链式前向星)。

      2.链式前向星

      “如果说邻接表是不好写但效率好,邻接矩阵是好写但效率低的话,前向星就是一个相对中庸的数据结构。前向星固然好些,但效率并不高。而在优化为链式前向星后,效率也得到了较大的提升。虽然说,世界上对链式前向星的使用并不是很广泛,但在不愿意写复杂的邻接表的情况下,链式前向星也是一个很优秀的数据结构。”------百度百科

      结构:  

      链式前向星也是一种通过存储边来存储图的数据结构(Plus),使用了类似链表的思想,主要部分如下:

      1.终点

      2.权值

      3.起点 (不必要,部分场合需要)

      4.next指针//重点

      5.head数组//表示以某点为起点的最后一条边的序号

      原理/实现方法:

      1.输入边信息。

      2.加边。

     1 struct edge
     2 {// int from;
     3     int nxt;//next指针 
     4     int to;
     5     int dis;
     6 }e[400005];//建议4倍 
     7 void add(int x,int y,int d)//起点,终点,权值
     8 {
     9     e[++cnt].nxt=head[x];//新边在遍历时的下一条边是head[]指向的以x为起点的最后一条边
    10     e[cnt].dis=d;
    11     e[cnt].to=y;
    12     head[x]=cnt;//更新head,以x结点为起点的最后一条边为新边
    13 }//cnt:边计数器 

      3.遍历(模板)

    1 for(int i=head[x];i;i=e[i].nxt)//i相当于遍历边的序号,循环开始时为head指向的以x为节点最后一条边,循环结束时为新边的下一条边,以此形成链表关系
    2 {
    3        //语句      
    4 }

      优点:

      1.用途多样。

      2.高逼格。

      缺点:

      1.较难理解。(不懂欢迎私信)

      2.遍历顺序实际操作较难。

      实际使用

      1.OI中最常用的存图方法之一。

      2.有必要熟练到默写的程度。

      over.

      

  • 相关阅读:
    .net里面实现javascript中的 escape 和 unescape 功能
    CMM/CMMI的5个等级
    数据库连接字符串大全
    关于ExtJS的许可协议
    C#网页自动登录和提交POST信息的多种方法
    [转]如何在网页中设置禁止查看源文件
    应用程序池的配置
    解决为应用程序池 提供服务的进程关闭时间超过了限制
    百度推出开放平台 或颠覆下载网站等六大行业
    UNION会自动删除重复项,union与union all的差异
  • 原文地址:https://www.cnblogs.com/randomaddress/p/11285563.html
Copyright © 2011-2022 走看看