广义表最基本的操作:取表头head(LS)与取表尾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)既可能是单元素又可能是广义表。
例如:
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)