数据结构之图

 

图就是顶点和边的集合。通常用邻接表(邻接链)表示。
线性主要从查找和删除上初步接触差异和效率。
树主要概念在于递归,抽象建模。
而图在抽象建模的层次上更进一层,主要是抓住图的多对多的根本特征,把多点看成一点,把新入点的边算进来,算成一个超级大点。
刚开始会不容易懂。但是明白之后,比特殊的树简单多了。
package com.linson.datastrcture;

import java.util.ArrayList;
import java.util.List;



//图就是顶点和边的集合。
//线性主要从查找和删除上初步接触差异和效率。
//树主要概念在于递归,抽象建模。
//而图在抽象建模的层次上更进一层,主要是抓住图的多对多的根本特征,把多点看成一点,把新入点的边算进来。
public class MyLinkGraph<T>
{
    //顶点
    public static class MyVertex<T>
    {
        public T mData;
        public MyEdge<T> mNextEdge;
        public Integer externInfo;//扩展字段:存储动态权重。
        public List<MyVertex<T>> path;//扩展字段:存储临时最短路径
        public MyVertex()
        {
            mData=null;
            mNextEdge=null;
            externInfo=Integer.MAX_VALUE;
            path=new ArrayList<MyVertex<T>>();
        }
        public MyVertex(T value,MyEdge<T> next)
        {
            mData=value;
            mNextEdge=next;
            externInfo=Integer.MAX_VALUE;
            path=new ArrayList<MyVertex<T>>();
        }
    }
    
    //
    public static class MyEdge<T>
    {
        public MyVertex<T> mEndNode;
        public Integer mWeight;
        public MyEdge<T> mOtherEdge;//注意这里是另一条边,意思是从固定点开始的所有边。而不是一条连一条的边。
        
        public MyEdge(Integer _weight,MyEdge<T> next,MyVertex<T> EndNode)
        {
            mEndNode=EndNode;
            mWeight=_weight;
            mOtherEdge=next;
        }
    }
    
    public MyLinkGraph()
    {}
    
    @SuppressWarnings("unchecked")
    public MyLinkGraph(int vetexSum)
    {
        mVertexs= new MyVertex[vetexSum];
    }
    
    public MyVertex<T>[] mVertexs=null;
}

 

posted @ 2018-12-30 02:05  琴鸟  阅读(165)  评论(0编辑  收藏  举报