十字鍊錶(Java)

2021-07-10 11:03:56 字數 1857 閱讀 5400

對於有向圖來說,鄰接表是有缺陷的。關心了出度問題,想要了解入度情況就必須要遍歷整個圖才能知道。反之也一樣。那麼,這一節就介紹有向圖的一種儲存方法,它能將鄰接表和逆鄰接表結合起來 ——十字鍊錶

定義頂點表結點結構:

vertex

firstin

firstout

其中,firstin表示入邊表頭指標,指向該頂點的入邊表中第乙個結點,firstout表示出邊表頭指標,指向該頂點的出邊表中的第乙個結點。

定義邊表結點結構:

tailvex

headvex

headlink

taillink

其中,tailvex是指弧起點在頂點表的下標,headvex是弧終點在頂點表的下標,headlink是指入邊表指標域,指向終點相同的下一條邊,tailvex是指邊表指標域,指向起點相同的下一條邊。

/*

* 功能:十字鍊錶有向圖(已提供引數)

* 輸入說明:vexs -- 頂點陣列

* edges -- 邊陣列

*/package test;

public class olistdg

// 初始化邊,利用頭插法建立十字鍊錶

for (int i = 0; i < elen; i++)

}/**

* 功能:頂點表結點結構

* 引數:vertex --> 頂點域,儲存頂點資訊

* firstin --> 入邊表頭指標,指向該頂點的入邊表中第乙個結點

* firstout --> 出邊表頭指標,指向該頂點的出邊表中第乙個結點

*/private class vertexnode

/*** 功能:邊表結點

* 引數:tailvex --> 弧起點在頂點表的下標

* headvex --> 弧終點在頂點表的下標

* headlink --> 入邊表指標域,指向終點相同的下一條邊

* taillink --> 邊表指標域,指向起點相同的下一條邊

*/private class edgenode

/*** 功能:返回ch位置

*/private int getposition(char ch, char vexs)

/*** 功能:列印鄰接表和逆鄰接表

*/public void print()

system.out.print("\n");

} else

}system.out.print("----------\n");

system.out.printf("invadjlist:\n");

for (int i = 0; i < vlen; i++)

system.out.print("\n");

} else }}

/*** 主函式

*/public static void main(string args) ;

// 邊陣列

char edges = new char , , , ,

};olistdg listudg = new olistdg(vexs, edges);

listudg.print();

}}

輸出結果:

adjlist:

a-->321

b-->3

c-->3

d-->

----------

invadjlist:

a<--

b<--0

c<--0

d<--210

十字鍊錶 Working routine

工作使艾奇快樂。勤奮的工作為國家直接貢獻了gdp,艾奇認為只要對國家有利,即使犧牲自己生命也心甘情願,絕不會因為自己可能受到禍害而躲開。當艾奇無聊的時候,她就會去工作,然而並不是每次工作都是輕鬆而愉悅的。當天艾奇又一次來到了學校,等待著她的是乙個有n 行m 列的巨大的矩陣和q個任務。對於每個任務,艾...

十字鍊錶(Orthogonal List)

十字鍊錶的特點 1 可以看成有向圖將鄰接表和逆鄰接表結合,每個結點有兩個指標域,分別指向入度邊鍊錶和出度邊鍊錶 2 時間複雜度與鄰接表相同 3 容易計算頂點的度 十字鍊錶的屬性 public static final int max vexnum num 20 最大頂點數 public static...

鄰接表 十字鍊錶

每一行都可以看成乙個單鏈表,第一行中,v0 1 3可以得到,v0的出度為v1和v3。鄰接表完整 include using namespace std const int max v 15 邊節點 typedef struct edge node enode,penode 表節點 typedef s...