广义表的长度和深度、表头表尾运算

广义表定义

广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广。即广义表中放松对表元素的原子限制,容许它们具有其自身结构。它被广泛的应用于人工智能等领域的表处理语言LISP语言中。在LISP语言中,广义表是一种最基本的数据结构,就连LISP 语言的程序也表示为一系列的广义表。

广义表是n(n≥0)个元素a1,a2,…,ai,…,an的有限序列。

  其中:

   ①ai--或者是原子或者是一个广义表。

   ②广义表通常记作:Ls=( a1,a2,…,ai,…,an)。

  ③Ls是广义表的名字,n为它的长度。

   ④若ai是广义表,则称它为Ls的子表。

  注意:

  ①广义表通常用圆括号括起来,用逗号分隔其中的元素。

   ②为了区分原子和广义表,书写时用大写字母表示广义表,用小写字母表示原子。

   ③若广义表Ls非空(n≥1),则al是LS的表头,其余元素组成的表(a1,a2,…,an)称为Ls的表尾。

   ④广义表是递归定义的


一、广义表特性:
1.层次性:广义表的元素可以是子表,而子表的元素还可以是子表,由此,广义表是一个多层次的结构;
2.共享性:广义表可为其他表所共享。
3.递归表:广义表可以是其自身的一个子表。


二、深度和长度

广义表(((a,b,(),c),d),e,((f),g))的长度是____,深度是____?

广义表长度是数第一层括号内的逗号数目可以看到,只有一个元素,就是((a,b,(),c),d),e,((f),g),所以长度是1,深度是数括号数目,深度是4。


三、表头和表尾

根据表头、表尾的定义可知:任何一个非空广义表的表头是表中第一个元素,它可以是原子,也可以是子表,而其表尾必定是子表。也就是说,广义表的head操作,取出的元素是什么,那么结果就是什么。但是tail操作取出的元素外必须加一个表——“ ()“
问题:
已知广义表LS=((a,b,c),(d,e,f)),运用head和tail函数取出LS中原子e的运算是?
已知广义表LS=((a,b,c),(d,e,f))
故: tail(LS)=((d,e,f))
      head(tail(LS))=(d,e,f)
      tail(head(tail(LS)))=(e,f)
      head(tail(head(tail(LS))))=e



  • 16
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值