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