十字链表画法——蓝墨云班课实践改错
课堂题目
分析课堂的错误作业
对十字链表的纵轴理解的不是很清晰,当时画的不完整。
课后的解决
- 十字链表是为了便于求得图中顶点的度(出度和入度)而提出来的。它是综合邻接表和逆邻接表形式的一种链式存储结构。
- 在十字链表存储结构中,有向图中的顶点的结构如下所示:
- 其中data表示顶点的具体数据信息,而firstIn则表示指向以该顶点为弧头的第一个弧节点。而firstOut则表示指向以该顶点为弧尾的第一个弧节点。为了表示有向图中所有的顶点,采用一个顶点数组存储每一个结点,如下图所示:
- 另外,在十字链表存储结构中,有向图中的每一条弧都有一个弧结点与之对应,具体的弧结点结构如下所示:
- 其中的tailVex表示该弧的弧尾顶点在顶点数组xList中的位置,headVex表示该弧的弧头顶点在顶点数组中的位置。hLink则表示指向弧头相同的下一条弧,tLink则表示指向弧尾相同的下一条弧。
- 从十字链表的数据结构来看,每一个顶点对应两个链表:以该顶点为弧尾的弧结点所组成的链表以及以该顶点为弧头的弧结点所组成的链表。
- 上述介绍来源于博客
具体的画法步骤
1.首先,根据题目,画出所有的顶点集并排成一列 。每一个顶点分为三个小格,第一个小格按顺序填上顶点名称,第二个小格判断该顶点是否有入度,第三个小格判断该顶点是否有出度;如果是,就画一个点;反之画一个“^”符号。
如下图所示:
2.然后画出边集并将其连接起来,来构建十字链表的横轴。连接的要点是:从顶点的第三个小格表示出的方向开始,指向由4个小格构成的边集;边集包括4个小格,第一个小格代表起点、第二个小格代表终点、第三个小格是来判断是否有某些顶点的入边、第四个小格判断是否还存在从同一顶点出发的边。
3.其次就是十字链表纵轴的画法了。我们需要回到顶点集的第二个格子,首先去判断其是否有入的边,即若该顶点的第二个格子中是点“·”的话,该顶点就有纵轴;从有向图中寻找该顶点的入度,对应到边集里面,用箭头连接上,十字链表就算是画完了。