一,广义表的基本概念:
广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构(即可以有子表)。它被广泛的应用于人工智能等领域的表处理语言LISP语言中。在LISP语言中,广义表是一种最基本的数据结构,就连LISP 语言的程序也表示为一系列的广义表。(更多内容,可参阅程序员在旅途)
二,广义表的基本表示:
1, 概念角度分析:
广义表是n个元素a1,a2,a3…. an组成的有限序列,通常记为:LS = (a1,a2,a3…. an);
其中,LS代表表名,ai 代表表中元素即为表元素,其既可以为单个原子元素又可以是一个广义表,当ai为为广义表是成为LS的一个子表(此处体现出来了递归思想)。
★特别提醒:
a, n为表的长度,当n = 0时,LS为空表;n >0时,表的第一个表元素称为广义表的表头(head),除此之外,其它表元素组成的表称为广义表的表尾(tail)。即当a1为表 头元素时,(a2,a3 ……an)为表尾元素。
b, 因为元素可以为子表,所以就体现出来层次结构(关于分层,请看下图)。
2,举例说明:
A=( ); //A是一个空表
B=(e); //表B有一个原子
C=(a, (b,c,d) ); //两个元素为原子a和子表(b,c,d)
D=(A,B,C); //有三个元素均为列表
E=(a,E); //递归的列表,包含两个元素,一个是单元素a,另一个是子表,但该子表是其自身.所以,E相当于一个无限的广义表( a,(a,(a,…))).
3,几个常见术语:
a,表的深度:表展开后所含括号的层数;
b,表的长度:长度为第一层的元素个数(原子和子表都只算一个);
c,表头、表尾。
4,图形化理解表: