4.1广义表与多重链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
'''
广义表generalized list
线性表n个元素都是单元素。
广义表中,元素可以是单元素也可以是 另一个广义表。

多重链表
链表中的节点可能同时隶属于多个链表。
多重链表节点的指针有多个,如我们定义一个next,和一个sublist,一个node对应两个指针。
但是有两个指针域不一定是多重链表,如双向链表不是多重链表。
树和图都可能用到多重链表。

列子: 表示矩阵。
二维数组表示的缺点:1。数组大小需要事先确定。2。对于零多的稀疏矩阵,浪费空间。
十字链表存储稀疏矩阵:
1、只存储非零项,非零项要素 Term(row,col,value)
2、通过两个指针域,把同行row、同列col,串起来。
通过行指针域形成双向链表闭环,列指针域形成双向链表闭环,两个闭环十字交叉。
两种结构 Head、Term,
Term(row,col,value)又一个特殊Term节点在左上角,表明多少行多少列非空,一共几个非空term节点。
Head 是行的头节点,或者列的头节点。

最终效果是:(这里是在方便表示并非字典或者元组的意思。)
Term{指针:(down,right),value:(row,col,value)}
Head{指针:(down,right,next)}
#next是head之间连接用,right、down用来 和非零项形成指针闭环。
head和term区别在 next和value,所以用
tag{指针:(down,right),uregion:(、、、)} 来拟合两种节点为一种节点的统一表示方法。

'''