十字链表

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

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. 1.1---判断字符串是否所有字符都不相同(CC150)

    import java.util.*; public class Different { public boolean checkDifferent(String str) { // write co ...

  2. PHP检测每一段代码执行时间

    <?php // 实例1 /** * @start time */ function proStartTime() { global $startTime; $mtime1 = explode( ...

  3. 【Eclipse】eclipse che 协作开发

    http://www.eclipse.org/che/ http://blog.csdn.net/ccfeng2008/article/details/50881024 http://www.osch ...

  4. 【架构】Google的大规模集群管理工具Borg

    参考资料: http://www.cnblogs.com/YaoDD/p/5374393.html http://www.cnblogs.com/YaoDD/p/5351589.html

  5. c++ template

    在类中其中一个函数使用模板,函数定义和实现必须放在头文件里. ca.h template<typename T> void swap2(T &a,T &b) { T c=a ...

  6. java mail api 使用

    所需要的jar包: http://pan.baidu.com/s/1qWGZRJm 如果遇到这个错误:在windows防火墙允许 javaw.exe访问网络.或者关闭防火墙 FATAL ERROR i ...

  7. Effective C++ -----条款25:考虑写出一个不抛异常的swap函数

    当std::swap对你的类型效率不高时,提供一个swap成员函数,并确定这个函数不抛出异常. 如果你提供一个member swap,也该提供一个non-member swap用来调用前者.对于cla ...

  8. Match:Seek the Name, Seek the Fame(POJ 2752)

    追名逐利 题目大意:给定一个字符串S,要你找到S的所有前缀后缀数组 还是Kmp的Next数组的简单应用,但是这一题有一个BUG,那就是必须输出字符串的长度(不输出就WA),然而事实上对于abcbab, ...

  9. C#文本选中及ContextMenuStrip菜单使用

    '文本框选中显示'TextBox1.SelectAll()选择所有文本'textBox1.Text.Insert(start,strInsertText)指定位置添加文本1 Private Sub T ...

  10. Oracle 修改现有列的数据类型

    如果表中有数据,Oracle是不能修改其数据类型的.但可以通过新建一个临时列,将要修改列的数据复制到临时列中,删除原列再修改临时列的名字.这样说好像有点拗口,分步解说一下. 表AC_REG中有列:is ...