圖就是頂點和邊的集合。一般用鄰接表(鄰接鏈)表示。 線性主要從查找和刪除上初步接觸差別和效率。 樹主要概念在於遞歸,抽象建模。 而圖在抽象建模的層次上更進一層,主要是抓住圖的多對多的根本特徵,把多點當作一點,把新入點的邊算進來,算成一個超級大點。
剛開始會不容易懂。可是明白以後,比特殊的樹簡單多了。
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; }