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