出现的问题:1.关于内部类的使用,使邻接表的结构定义更加清晰,不分散。在同一个类中实例化内部类和普通类的实例化相同,但在其他类中应用,实例化时需要加上外部实例化对象。例:
OutClass out = new OutClass();
OutClass.InnerClass inner = out.new InnerClass();
2.关于自定义类数组的使用:
Vertex[] vertexNode; //声明要创建的对象数组
vertexNode = new Vertex[size]; //创建对象数组,为对象数组开辟空间
vertexNode[0] = new Vertex(); //创建数组对象,为数组对象开辟空间
vertexNode[0].data //使用数组对象中的属性
上代码:
public class Test2 {
int size;
Vertex[] vertexNode;
class Vertex{
char data;
EdgeNode firstEdge;
}
class EdgeNode{
int adjvex; //顶点数组中顶点的下标
int weight;
EdgeNode next;
}
public Test2(char[] vertexs,char[][] edges) {
int size = vertexs.length;
this.size = size;
vertexNode = new Vertex[size];
System.out.println(size);
for(int i=0;i<size;i++) {
vertexNode[i] = new Vertex();
vertexNode[i].data = vertexs[i];
}
for(char[] c:edges) {
//无向图需要双向奔赴
EdgeNode edgeNode1 = new EdgeNode();
edgeNode1.adjvex = getPosition(c[1]);
edgeNode1.next = vertexNode[getPosition(c[0])].firstEdge;
vertexNode[getPosition(c[0])].firstEdge = edgeNode1;
EdgeNode edgeNode2 = new EdgeNode();
edgeNode2.adjvex = getPosition(c[0]);
edgeNode2.next = vertexNode[getPosition(c[1])].firstEdge;
vertexNode[getPosition(c[1])].firstEdge = edgeNode2;
}
}
private int getPosition(char data) {
for(int i=0;i<size;i++) {
if(vertexNode[i].data == data) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
char[] vexs = {'A','B','C','D','E','F','G','H','I','J','K'};
char[][] edges = new char[][] {
{'A','C'},
{'A','D'},
{'A','F'},
{'B','C'},
{'C','D'},
{'E','G'},
{'D','G'},
{'I','J'},
{'J','G'},
{'E','H'},
{'H','K'},
};
Test2 test2 = new Test2(vexs, edges);
for(int i=0;i<test2.size;i++) {
System.out.print("顶点序号"+i+" "+test2.vertexNode[i].data+"->");
while(test2.vertexNode[i].firstEdge!=null) {
System.out.print(test2.vertexNode[test2.vertexNode[i].firstEdge.adjvex].data
+"->");
test2.vertexNode[i].firstEdge = test2.vertexNode[i].firstEdge.next;
}
System.out.println();
}
}
}
执行结果: