子表存储(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 指针串联。

链接到