# 广义表

## 1. 广义表是什么

* 广义表是 **线性表的推广**
* 对于线性表而言，n 个元素都是基本的 **单元素**
* 广义表中，这些元素不仅可以是单元素也可以是 **另一个广义表**

```cpp
typedef struct GNode* GList;
struct GNode {
    int tag; /* 标志域：0表示结点是单元素，1表示结点是广义表 */
    union { /* 子表指针域SubList与单元素数据域Data复用，即共用存储空间 */
        ElementType Data;
        GList SubList;
    } URegion;
    GList next; /* 指向后继结点 */
};
```

## 2. 多重链表

链表中的节点可能同时隶属于多个链

* 多重链表中结点的 **指针域会有多个**
* 但包含两个指针域的链表并不一定是多重链表，比如 双向链表

**用途：**

* 基本上如 **树**、**图** 这样的相对复杂的数据结构都 **可以采用多重链表** 方式实现存储
