十字链表

简单的说就是邻接表和逆邻接表的合体,解决了原邻接表或者逆邻接表出度和入度的计算无法兼得的问题。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LH.GraphConsole
{
    public struct OrthogonalListGraph
    {
        public NodeItem[] VertexNodes;

        public OrthogonalListGraph(int size)
        {
            VertexNodes = new NodeItem[size];
        }
    }

    public struct NodeItem
    {
        public List<OrthEdgeItem> InList;
        public List<OrthEdgeItem> OutList;

        public NodeItem(List<OrthEdgeItem> inList, List<OrthEdgeItem> outList)
        {
            InList = inList;
            OutList = outList;
        }
    }

    public class OrthEdgeItem
    {
        public int Weight;
        public string Name;

        public OrthEdgeItem(int weight, string name)
        {
            Weight = weight;
            Name = name;
        }
    }
}

简单的主函数:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LH.GraphConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            OrthogonalList();
        }

        private static void OrthogonalList()
        {
            var size = 5;
            var orgthListGraph = new OrthogonalListGraph(size);

            var orgEdge03 = new OrthEdgeItem(1, "edge03");
            var orgEdge10 = new OrthEdgeItem(1, "edge10");
            var orgEdge12 = new OrthEdgeItem(1, "edge12");
            var orgEdge21 = new OrthEdgeItem(1, "edge21");
            var orgEdge20 = new OrthEdgeItem(1, "edge20");

            var inList0 = new List<OrthEdgeItem>();
            inList0.Add(orgEdge10);
            inList0.Add(orgEdge20);

            var outList0 = new List<OrthEdgeItem>();
            outList0.Add(orgEdge03);

            var nodeItem0 = new NodeItem(inList0, outList0);
            var nodeItem1 = new NodeItem();
            var nodeItem2 = new NodeItem();
            var nodeItem3 = new NodeItem();
            var nodeItem4 = new NodeItem();

            orgthListGraph.VertexNodes[0] = nodeItem0;
            orgthListGraph.VertexNodes[1] = nodeItem1;
            orgthListGraph.VertexNodes[2] = nodeItem2;
            orgthListGraph.VertexNodes[3] = nodeItem3;
            orgthListGraph.VertexNodes[4] = nodeItem4;
        }
    }
}

简要说明,只是为了便于理解数据结构,没有刻意的去标准实现,见谅。

数据结构之图 Part2 - 3的更多相关文章

  1. 数据结构之图 Part2 - 1

    邻接矩阵 网上很少有C# 写图的数据结构的例子,实际的项目中也从来没用过Array 这坨东西,随手写个,勿喷. namespace LH.GraphConsole { public struct Gr ...

  2. 数据结构之图 Part2 - 2

    邻接表 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...

  3. python数据结构之图的实现

    python数据结构之图的实现,官方有一篇文章介绍,http://www.python.org/doc/essays/graphs.html 下面简要的介绍下: 比如有这么一张图: A -> B ...

  4. hdu 1233:还是畅通工程(数据结构,图,最小生成树,普里姆(Prim)算法)

    还是畅通工程 Time Limit : 4000/2000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  5. 利用python+graphviz绘制数据结构关系图和指定目录下头文件包含关系图

    作为一名linux系统下的C语言开发,日常工作中经常遇到两个问题: 一是分析代码过程中,各种数据结构互相关联,只通过代码很难理清系统中所有结构体的整体架构,影响代码消化的效率; 二是多层头文件嵌套包含 ...

  6. python数据结构之图的实现方法

    python数据结构之图的实现方法 本文实例讲述了python数据结构之图的实现方法.分享给大家供大家参考.具体如下: 下面简要的介绍下: 比如有这么一张图:     A -> B     A ...

  7. python数据结构之图深度优先和广度优先实例详解

    本文实例讲述了python数据结构之图深度优先和广度优先用法.分享给大家供大家参考.具体如下: 首先有一个概念:回溯 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标.但当探索到 ...

  8. 数据结构之图 Part1

    Part 1 预计使用7天的时间来过掉图相关的数据结构.第一天主要是一天图的基本概念,熟练掌握定义是一切交流和沟通的基础. 1定义 1.1图 有穷非空顶点,外加边. G(V,E) Graph Vert ...

  9. C++数据结构之图

    图的实现是一件很麻烦的事情,很多同学可能在学数据结构时只是理解了图的基本操作和遍历原理,但并没有动手实践过.在此,我说说我的实现过程. 首先,在草稿纸上画一个图表,这里是有向图,无向图也一样,如下: ...

随机推荐

  1. 转:安装MySQL遇到MySQL Server Instance Configuration Wizard未响应的解决办法

    问题:安装了MySQL之后进入配置界面的时候,总会显示“MySQL Server Instance Configuration Wizard未响应”,一直卡死. 解决办法:Win7系统中,以管理员的权 ...

  2. 在Navicat for MySQL中打开视图时,提示视图没有主键的问题

    一直把视图理解为一个select语句而已,视图一般就是用于查询,不会通过视图来更新表或视图本身的数据,所以视图根本不需要什么主键.今天自己建了一个视图view_test: drop view if e ...

  3. php中array_filter的使用

    这是今天在做作业的时候遇到的一个问题,不知道大家有没有遇到同样的问题,就是去除数组中不符合我们条件的数据并且保留其键名. 言归正传: array array_filter ( array $input ...

  4. IPC----哲学家就餐问题(并发与互斥)

    哲学家就餐问题描述: 5个哲学家,5个筷子.5个哲学家围坐在一张桌子上,筷子放在分别放在每个哲学家的两旁.如果所有哲学家在某个时刻同时拿起左边的筷子,那么右边的筷子就都被其他的哲学家拿了,造成大家都无 ...

  5. poj1177

    题意:在平面直角坐标系内给出一些与坐标轴平行的矩形,将这些矩形覆盖的区域求并集,然后问这个区域的周长是多少.(边与边重合的地方不计入周长) 分析:线段树.曾经做过类似的求矩形覆盖的总面积的题.这道题同 ...

  6. sed小知识总结

    1)sed默认是打印出文件中的所有行的,使用 -n 选项可以只打印出 匹配 的行 2)当用到sed不同的编辑命令时,用{},且不同编辑命令之间用分号

  7. iptables之链之间的跳转

    创建一个新的链     按照管理,用户自定义的链用小写来区分它们 iptables -N newchain 可以在这个链的尾部跳转到INPUT链 iptables -A newchain -j INP ...

  8. c#图片输出

    1:  Response.BinaryWrite() 其实就是和输出文字一样 只是图片是流的形式; delegate long myDel(int first, int second); FileSt ...

  9. Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值

    Delphi Cxgrid获取选中行列,排序规则,当前正在编辑的单元格内的值 cxGrid1DBTableView1.Controller.FocusedRowIndex 当前行号 cxGrid1DB ...

  10. C#在类中用调用Form的方法

    class 你的类 { private Form1 frm; //构造函数 public 你的类( Form1 form) { frm = form; } //调用form方法 private voi ...