对于任意一个非空广义表来说,都是由两部分组成:表头和表尾。也就是说,只要确定了广义表的表头和表尾,就可以唯一确定这个广义表。
复制一个广义表,其实就是复制广义表中的表头和表尾。如果表头或者表尾同样是一个广义表,就继续复制子表的表头和表尾。
因此,复制广义表的过程,就是以递归的方式复制广义表中的原子和子表。递归的出口有两个:
- 如果当前遍历的元素为空表,则直接返回空表。
- 如果当前遍历的元素为该表的一个原子,那么直接复制,返回即可。
前面章节,给大家介绍了两种存储广义表的方式。采用图 1 所示的方式存储广义表:
图1 广义表 C 的结构示意图
复制广义表的 C 语言程序如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct Node {
int tag;//标志域
un