1、广义表的相关概念
---- 广义表是线性表的推广,也称为列表(Lists),广义表一般记作:LS=(a1,a2,a3,...,an),其中LS是广义表的名称,n是长度。
线性表的元素是单个元素,而在广义表中,a1可以是单个元素,也可以是广义表,分别称为广义表LS的原子(Atom)和子表(Glist).
一般用大写字母表示广义表,小写字母表示单个元素。当LS非空时,称第一个元素a1为LS的表头(Head),其余元素组成的表
(a2,a3,...,an)是LS的表尾(Tail)。下面是广义表的一些例子:
-- 1)A =():A是空表,长度为0.
-- 2)B =(e):B表只有一个元素e,长度是1.
-- 3)C =(a,(b,c)):C有两个元素,一个是单元素a,另一个是子表(b,c)。
-- 4)D =(A,B,C)=((),(e),(a,(b,c))):D有三个元素,都是子表。
-- 5)E = (a,E):E是一个递归的表,长度为2.
---- 结论
-- 1)广义表的元素可以是子表,而子表的元素也可以是子表,由此,广义表是一个多层的结构。
-- 2)广义表可用其他广义表来表示,即共享广义表。在上述例子中,广义表A、B、C都是D的子表,因此可以在D中通过广义表的
名字来引用,如D =(A,B,C)。
-- 3)广义表可以是一个递归的表。
广义表中括号嵌套的最大层数称为广义表的深度。如上例中,A的深度是0,B的深度是1,C的深度是2,D的深度是3.
2、广义表的存储结构
---- 由于广义表中的数据元素可以具有不同的结构,因此很难用顺序存储的方式,通常采用链式存储结构。