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

广义表定义

广义表(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



你可能感兴趣的:(其他,广义表)