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