广义表和多重链表(十字链表)
广义表(Generalized List)
- 广义表是线性表的推广
- 对于线性表而言,n个元素都是基本的单元素;
- 广义表中,这些元素不仅可以是单元素也可以是另一个广义表
typedef struct GNode *GList; struct GNode{ int tag; /*标志域:0表示结点是单元素,1表示结点是广义表*/ union{ /*子表指针域Sublist与单元素数据域Data复用,即共用存储空间*/ ElementType Data; GList SubList; }URegion; GList Next; /*指向后续结点*/ };
多重链表:链表中的结点可能同时隶属于多个链
- 多重链表中结点的指针域会有多个,如前面例子包含了Next和SubList两个指针域;
- 但包含两个指针域的链表并不一定是多重链表,比如在双向链表不是多重链表。
多重链表有广泛的用途:基本上如树、图这样相对复杂的数据结构都可以采用多重链表方式实现存储。
Term和Head采用union结构,用tag区分