广义表的head与tail的基本用法

广义表最基本的操作:取表头head(LS)与取表尾tail(LS)

例:LS=(a,(b,c,d))
head(LS)=a
tail(LS)=((b,c,d))
head(tail(LS))=(b,c,d)
tail(tail(LS))=()
head(head(tail(LS)))=b
tail(head(tail(LS)))=(c,d)
head(tail(head(tail(LS))))=c
tail(tail(head(tail(LS))))=(d)
head(tail(tail(head(tail(LS)))))=d
tail(tail(tail(head(tail(LS)))))=()

根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。
也就是说,广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表“ ()

长度:**最大括号中的逗号数加一、LS最大括号内有例如LS 长度2
深度:
上面每个元素的括号匹配数加1**例如LS 深度2+1=3

GetHead是取广义表的第一个元素,要去掉一个"()",

GetTail是除掉第一个元素剩下的元素组成的广义表,也就是除掉第一个元素,再把剩余的元素"()"。


举个例子:


GetHead【((a,b),(c,d))】→(a,b)


GetHead【GetTail【((a,b),(c,d))】】→GetHead【((c,d))】→(c,d)


GetHead【GetTail【GetHead【((a,b),(c,d))】】】→GetHead【GetTail【(a,b)】】→GetHead【(b)】→b


GetTail【GetHead【GetTail【((a,b),(c,d))】】】→GetTail【GetHead【((c,d))】】→GetTail【(c,d)】→(d)

————————————————

版权声明:本文为CSDN博主「木头人i」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/weixin_43332735/article/details/111240828




head:取非空广义表的第一个元素

tail:取非空广义表除第一个元素外剩余元素构成的广义表


先科普一下广义表Head和Tail的作用


对于 非空广义表 来说,它的表头(即Head)既可能是单元素又可能是广义表。

例如:

Head( (a,b,c) )= a ;

Head(((a),(b)))=(a);

但其表尾(即Tail)一定是一个广义表,也就是说,广义表利用Tail提取后也一定还是一个广义表。这么说有点像废话,其实不然,这里面就隐藏着一个初学者很容易踩到的陷阱。

例如:

Tail((a,b,c)) 的答案显然是(b,c)

但 Tail(((a,b),(c,d))) 的答案是否是(c,d)呢,答案是否定的。

它的答案是 ((c,d))。这就是开头为什么要强调广义表利用Tail提取后也一定还是一个广义表的原因。因为如果广义表中除去表头部分后的部分仍是个广义表的话,就容易让我们混淆,以为答案直接是后部分,而忽略了给它多加一对括号。


下面,让我们做一道题试试手吧!

Tail ( Head ( Tail ( ( (a,b),(c,d) ) ) ) )


答案:

Tail(((a,b),(c,d)))=((c,d))而非(c,d)

Head( ((c,d)) )=(c,d);

Tail((c,d))=(d)