什么是广义表呢?
(1)广义表是由零个或多个原子或子表组成的有限序列,是线性表的推广(2) 广义表一般记作:LS=(d1,d2,…,dn)
(3)di可以是单个元素,也可以是广义表,分别称为广义表LS的原子和子表
(1)当广义表LS非空时,称第一个元素d1为LS的表头(Head),称其余元素组成的子表(d2,…,dn)是LS的表尾(Tail)
(2)非空广义表可唯一分解成表头和表尾;反过来,由表头和表尾可唯一组成一个广义表
(3)广义表括号的层数定义为广义表的深度
(1)广义表中的数据元素有相对次序
(2)广义表的长度定义为最外层包含元素个数
(3)广义表的深度定义为所含括弧的重数
注意:“原子”的深度为 0 “空表”的深度为 1
(4)广义表可以共享
(5)广义表可以是一个递归的表
(6)递归表的深度是无穷值,长度是有限值
任何一个非空广义表LS = (a1,a2,…,an)均可
分解为表头Head(LS) = a1和表尾Tail(LS) = ( a2, …, an)两部分
例如: D = ( E, F ) = ((a, (b, c)),F)
//求广义表D的表头为E,表尾为F
Head( D ) = E Tail( D ) = ( F )
//其中E分为广义表(a, (b, c))
Head( E ) = a Tail( E ) = ( ( b, c) )
//在广义表(( b, c))中仅有表头( b, c),无表尾
Head( (( b, c)) ) = ( b, c)
Tail( (( b, c)) ) = ( )
Head( ( b, c) ) = b Tail( ( b, c) ) = ( c )
// 在广义表( c )中,表头为c 表尾为( )
Head( ( c ) ) = c Tail( ( c ) ) = ( )
几个小例子:
1. GetHead( (a,b,c) )
2. GetTail( (a,b,c,d) )
3. GetHead( ( (a,b), (d) ) )
4. GetTail( ( (a,b), (d) ) )
5. GetHead( GetTail( ( (a,b), (c,d) ) ) )
结果分别是:
1. a
2. (b,c,d)
3. (a,b)
4. ((d))
5. ((c,d))
原文地址:http://blog.csdn.net/gxseveryday/article/details/45697517