广义表是线性表的推广,又称列表。线性表的元素仅限于原子项,即每个数据元素只能是一个数或一个记录,如果放松对线性表元素的这种限制,允许它们自身具有结构,由此就产生了广义表的概念。
一、广义表的定义
广义表是n(n>=0)个元素的有限序列,其中每个元素是原子项或者是一个广义表,通常记作GL=(a1,a2,a3,...,an)。GL是广义表的名字,n是它的长度。为了区分原子项和广义表,在书写上习惯用大写字母表示广义表,用小写字母来表示原子。通常用圆括号将广义表括起来,用逗号分隔其中的元素。当广义表非空时,称第一个元素a1是GL的表头(head),其他元素组成的表称为GL的表尾(tail)。
下面列举一些广义表的例子:
(1) A=() —— A是一个空表,其长度为零;
(2) B=(a) —— B是一个只有一个原子的广义表,其长度为1;
(3) C=(a,(b,c)) —— C是一个长度为2的广义表,第一个元素是原子,第二个元素是子表;
(4) D=(A,B,C) = ((),(a),(a,(b,c))) —— D是一个长度为3的广义表,其中三个元素均为子表;
(5) E=(C,d) = ((a,(b,c)),d) —— E是一个长度为2的广义表,第一个元素是子表,第二个元素是原子;
(6) F=(e,F) = (e,(e,(e,...))) —— F是一个递归的表,它的长度为2,第一个元素是原子,第二个元素是表自身,展开后它是一个无限的广义表。
一个表