十字链表法是有向图的一种链式存储结构,例题来自王道课本。
有两个结构需要记住,
一个是点的结构:数据、第一个入度弧(以该点为弧头的第一个弧)、第一个出度弧
一个是弧的结构:出度、入度、指向弧头(箭头)相同的下一条弧、指向弧尾相同的下一条弧
eg:
有点:0、1、2、3
有弧:<0,1><0,2>
<2,0><2,3>
<3,0><3,1><3,2>
首先画出类似于邻接表的图:
点是三格,弧是四格。写出点,出入度点。
第二步,连接。
点0的第三格(出,第一个弧尾)连接1,1的第四格连接2(1和2的箭头都是0发射的)。
点0的第二格需要指向第一个射向它的弧,所以是<2,0>。
<0,1>的第三格需要指向弧头相同的,即弧的第二格为1,指向<3,1>。
<0,2>第三格指向<3,2>。
点1,没有向任何点射出,只连第二格,即第一个射向它的(次序随意,通常按照邻接表顺序从上往下从左往右),<0,1>。
点2第三格连接<2,0>,<2,0>第四格连接<2,3>。
点2第二格指向第一个射向它的,<0,2>。
<2,0>第三格指向下一条第二格为0的。
点3第三格,<3,0>,<3,1>,<3,2>依次连接。
点3第二格指向指向弧头是它的,<2,3>。
<3,0>,<3,1>,<3,2>第三格需要指向弧头相同的,但它们已经没有下一条弧,置空。
第三步,检查是否有空链没标。
需要指出的是,十字链表法表示不唯一,因为其中涉及到了“第一条、下一条”。但一个十字链表确定一个图。
太麻烦,出卷老师出的话就是大笨蛋。