子表存储(Sublist Storage)
子表存储是广义表的一种存储方式,又称子表分析法。与表头表尾存储不同,子表存储将广义表中的每个元素(原子或子表)都直接表示为链表中的独立结点,从而更直观地反映广义表的层次结构。
结点结构
在子表存储中,每个结点包含一个标志域 tag 和一个共用体(union):
- tag = 0:表示该结点为原子结点,data 域存储原子值
- tag = 1:表示该结点为子表结点,sublist 域指向子表的第一个结点
此外,每个结点还有一个 next 指针,指向同一层的下一个元素(类似于链表的 next 指针)。
存储特点
子表存储的构建方式类似于链表:
- 将广义表中的元素分类为原子和子表,分别构造对应结点
- 原子结点直接存储具体值
- 子表结点递归地指向子表的内部结构
- 同一层的所有结点通过 next 指针串联
相比表头表尾存储,子表存储的优势在于:
- 空间的利用更好,没有额外的表头框架结点
- 广义表的深度和长度都可以在存储结构上直观体现
- 更容易理解和实现广义表的复制、遍历等操作
示例
对于广义表 A = (a, (b, c), d),子表存储的构造方式为:第一层链表包含三个结点,分别对应原子 a、子表 (b, c) 和原子 d。其中子表结点指向的链表包含原子 b 和原子 c 两个结点,通过 next 指针串联。
链接到
- 上一个知识点:2.1 广义表的定义
- 下一个知识点:2.3 表头表尾存储