資料結構 廣義表

2021-09-30 16:46:35 字數 974 閱讀 1569

ls=( a1,a2,…,ai,…,an)。

①ai   是原子或者是乙個廣義表。

②ls是廣義表的名字,n為它的長度

③若ai是廣義表,則稱它為ls的子表、

④廣義表是遞迴定義的

(1)廣義表常用表示

① e=()

e是乙個空表,其長度為0。

② l=(a,b)

l是長度為2的廣義表,它的兩個元素都是原子,因此它是乙個線性表

③ a=(x,l)=(x,(a,b))

a是長度為2的廣義表,第乙個元素是原子x,第二個元素是子表l。

④ b=(a,y)=((x,(a,b)),y)

b是長度為2的廣義表,第乙個元素是子表a,第二個元素是原子y。

⑤ c=(a,b)=((x,(a,b)),((x,(a,b)),y))

c的長度為2,兩個元素都是子表。

⑥ d=(a,d)=(a,(a,(a,(…))))

d的長度為2,第乙個元素是原子,第二個元素是d自身,展開後它是乙個無限的廣義表。

(2)廣義表的深度

乙個表的"深度"是指表展開後所含括號的層數。

廣義表的兩個特殊的基本運算:取表頭head(ls)和取表尾tail(ls)。

根據表頭、表尾的定義可知:任何乙個非空廣義表的表頭是表中第乙個元素,它可以是原子,也可以是子表,而其表尾必定是子表。

【例】head(l)=a, tail(l)=(b)

head(b)=a, tail(b)=(y)

由於tail(l)是非空表,可繼續分解得到:

head(tail(l))=b, tail(tail(l))=()

對非空表a和(y),也可繼續分解。

注意:廣義表()和(())不同。前者是長度為0的空表,對其不能做求表頭和表尾的運算;而後者是長度為l的非空表(只不過該表中惟一的乙個元素是空表),對其可進行分解,得到的表頭和表尾均是空表()。

資料結構 廣義表

廣義表 lists,又稱列表 是一種非線性的 資料結構 是線性表 的一種推廣。即廣義表中放鬆對錶元素的原子限制,容許它們具有其自身結構。思想 廣義表就類似下圖的結構,他的大體 下圖第一行 相當於乙個帶頭結點的鍊錶,思想,首先要有乙個頭結點為head型別,每乙個廣義表有且只有乙個head,而後每個節點...

資料結構 廣義表

概念 陣列和廣義表可以看成是線性表在下述含義上的擴充套件,表中資料元素本身也是乙個資料結構。廣義表也可以看作是線性表的推廣。1 廣義表的元素可以是子表,而子表的元素還可以包含子表。2 列表可以被其他列表所共享。3 列表可以是乙個遞迴的表,也就是說列表也可以是自身的子表。由於廣義表裡面的資料元素可以具...

資料結構 廣義表

一 問題概述 廣義表是非線性的資料結構,是由若干個元素組合而成的,廣義表中可以有子表,類似這樣的 我們以c a,b,c,d 為例,將它定義為這樣的資料結構 我們會給定字串的形式,如 char str a,b,c,d 然後將它轉化為如上的資料結構。二 解決辦法 1 將符號 看作是頭節點,然後將是數值的...