1. 程式人生 > >廣義表的長度和深度、表頭表尾運算

廣義表的長度和深度、表頭表尾運算

廣義表定義

廣義表(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