十字鏈表畫法——藍墨雲班課實踐改錯
課堂題目

分析課堂的錯誤作業
對十字鏈表的縱軸理解的不是很清晰,當時畫的不完整。
課后的解決
- 十字鏈表是為了便於求得圖中頂點的度(出度和入度)而提出來的。它是綜合鄰接表和逆鄰接表形式的一種鏈式存儲結構。
- 在十字鏈表存儲結構中,有向圖中的頂點的結構如下所示:

- 其中data表示頂點的具體數據信息,而firstIn則表示指向以該頂點為弧頭的第一個弧節點。而firstOut則表示指向以該頂點為弧尾的第一個弧節點。為了表示有向圖中所有的頂點,采用一個頂點數組存儲每一個結點,如下圖所示:

- 另外,在十字鏈表存儲結構中,有向圖中的每一條弧都有一個弧結點與之對應,具體的弧結點結構如下所示:

- 其中的tailVex表示該弧的弧尾頂點在頂點數組xList中的位置,headVex表示該弧的弧頭頂點在頂點數組中的位置。hLink則表示指向弧頭相同的下一條弧,tLink則表示指向弧尾相同的下一條弧。
- 從十字鏈表的數據結構來看,每一個頂點對應兩個鏈表:以該頂點為弧尾的弧結點所組成的鏈表以及以該頂點為弧頭的弧結點所組成的鏈表。
- 上述介紹來源於博客
具體的畫法步驟
1.首先,根據題目,畫出所有的頂點集並排成一列 。每一個頂點分為三個小格,第一個小格按順序填上頂點名稱,第二個小格判斷該頂點是否有入度,第三個小格判斷該頂點是否有出度;如果是,就畫一個點;反之畫一個“^”符號。
如下圖所示:

2.然后畫出邊集並將其連接起來,來構建十字鏈表的橫軸。連接的要點是:從頂點的第三個小格表示出的方向開始,指向由4個小格構成的邊集;邊集包括4個小格,第一個小格代表起點、第二個小格代表終點、第三個小格是來判斷是否有某些頂點的入邊、第四個小格判斷是否還存在從同一頂點出發的邊。


3.其次就是十字鏈表縱軸的畫法了。我們需要回到頂點集的第二個格子,首先去判斷其是否有入的邊,即若該頂點的第二個格子中是點“·”的話,該頂點就有縱軸;從有向圖中尋找該頂點的入度,對應到邊集里面,用箭頭連接上,十字鏈表就算是畫完了。

