广义表的常考知识点汇总

广义表的常考类型:

  1. 求 head 和 tail
  2. 求广义表的深度
  3. 求广义表的长度

广义表的概念:
广义表是 n 个数据元素(d1,d2,d3,…,dn)的有限序列,广义表中的 di 既可以是单个元素,也可以是一个广义表,通常记为 L = (d1,d2,d3,…,dn),L 是广义表的名称,通常广义表的名称用大写字母表示。n 是广义表的长度。若其中的 di 是一个广义表,则称 di 是广义表 L 的子表。在广义表 L 中,d1 是广义表 L 的表头,而广义表 L 其余部分组成的表(d2,d3,…,dn)称为广义表表尾。由此可见,广义表的定义是递归定义的,因为在定义广义表时又使用的广义表的概念。
注:看完下面的题目就会对广义表的概念有更深的理解

广义表的表头和表尾:
表头:当广义表 L 非空时,称第一个元素为 L 的表头。
表尾:称广义表 L 中除去表头后其余元素组成的广义表为 L 的表尾。

题目:广义表 L =(a,(b,c))的表头是单个元素 a,表尾是广义表((b,c)),即head(L)= a , tail(L)= ((b,c))
注:求表尾的时候原广义表的最外面这层小括号不能漏,即 tail(L)的结果不是(b,c),而是((b,c))

题目:广义表 L =((a,b),c)的表头不是 a,而是子表(a,b),表尾是广义表(c)

题目:广义表 L =(a,b,c)的表头是单个元素 a,表尾是(b,c)

题目:广义表 L =(a)的表头是单个元素 a,表尾是广义表(),表尾一定是个广义表,表尾为空时则用()表示

总结:根据广义表表头和表尾的定义可知
(1)对任意一个非空的广义表,其表头可以是单个元素,也可以是子表
(2)表尾一定是广义表
(3)表尾是由除了表头以外的其余元素组成的广义表

题目练手:
已知广义表 L = ((x,y,z),a,(u,t,w)),
求head(head(tail(tail(L))))的结果
解:
①用tail运算去掉表头(x,y,z),即tail(L)=(a,(u,t,w))
②再tail运算去掉表头 a,即tail(tail(L))=((u,t,w))
③用head运算取出表头(u,t,w),即head(tail(tail(L)))=(u,t,w)
④再用head运算取出表头u,即head(head(tail(tail(L))))= u
所以head(head(tail(tail(L))))= u

广义表的长度:
广义表的长度指:广义表中所包含的数据元素的个数。
题目:在广义表 (a,(b,c,d))中,它包含单个元素 a 和一个子表(b,c,d),因此该广义表的长度为 2

题目:广义表((a,b,c)) 中只有一个子表(a,b,c),因此该广义表的长度为 1

广义表的深度:
广义表的深度,可以通过观察该表中所包含括号的层数间接得到。这里需要注意,数左括号(或右括号)时同一层次的多个括号只计算一次。
题目:广义表((a,b),(c,(d,e))) 中,子表(a,b) 和 (c,(d,e)) 位于同层,(a,b)只有 1 层括号,而(c,(d,e))有 2 层括号,加上最外层的 1 层括号,所以此广义表中包含 3 层括号,因此深度为 3

题目:广义表 (a,(a,b),d,e,((i,j),k))的深度是 3
深度的求法为上面每个元素的括号匹配数加1的最大值
a 的括号匹配数为 0,加上1后为1;
(a,b)的括号匹配数为 1,加上1后为2;
d 的括号匹配数为 0,加上1后为1;
e 的括号匹配数为 0,加上1后为1;
((i,j),k)的括号匹配数为 2,加上1后为3
找最大值,故该广义表的深度为3。

题目:已知广义表 L,head(L)与 tail(L)的深度分别是 4 和 6,则 L 的深度是 6
解:
在这里插入图片描述
该广义表有两个元素,第一个元素有 4 对括号,第二个元素有 5 对括号,所以head(L)的深度为 4,tail(L)的深度为 6。
即最大深度为 tail(L)的深度 6
对比下一题

题目:已知广义表 L,head(L)与 tail(L)的深度均为 6,则 L 的深度是 7
解:在这里插入图片描述
该广义表有两个元素,第一个元素有 6 对括号,第二个元素有 5 对括号,所以head(L)的深度为 6,tail(L)的深度为 6。
即最大深度为 head(L)的深度 6 再加上最外层的 1 对括号 ,所以该广义表 L 的深度为 7
为什么不是 tail(L) 的深度 6 加 1?因为计算 tail(L) 的深度时已经加上最外层括号了,计算 head(L)的深度是不包括最外层的括号。
对比上一题

题目:广义表 L = (x,((y),((a)),L))的深度为?
解:广义表中出现了表名 L ,递归,所以深度是 无穷。

若把题目改成:
广义表 L = (x,((y),((a)),b))的深度为 4
解:广义表 L 有两个数据元素 x 和子表((y),((a)),b),在子表((y),((a)),b)中的(y),((a)),b都位于同层,所以子表((y),((a)),b)的深度是 3,加上最外层的一层括号,所以该广义表 L 的总深度为 4

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值