定義
廣義表是線性表的推廣森渐,線性表中的元素都是原子的單元素鉴裹,而廣義表中的元素可以是原子的單元素饱狂,也可以是一個(gè)子廣義表。廣義表的定義是遞歸的朝氓,廣義表是線性表的遞歸數(shù)據(jù)結(jié)構(gòu)
(1)廣義表常用表示
∧小① E=()
E是一個(gè)空表主届,其長(zhǎng)度為0。
〈隆② L=(a君丁,b)
L是長(zhǎng)度為2的廣義表,它的兩個(gè)元素都是原子将宪,因此它是一個(gè)線性表
』婷啤③ A=(x,L)=(x较坛,(a印蔗,b))
A是長(zhǎng)度為2的廣義表,第一個(gè)元素是原子x丑勤,第二個(gè)元素是子表L华嘹。
④ B=(A确封,y)=((x除呵,(a,b))爪喘,y)
B是長(zhǎng)度為2的廣義表颜曾,第一個(gè)元素是子表A,第二個(gè)元素是原子y秉剑。
》汉馈⑤ C=(A兽埃,B)=((x放妈,(a,b))笆豁,((x略水,(a价卤,b)),y))
C的長(zhǎng)度為2渊涝,兩個(gè)元素都是子表慎璧。
⑥ D=(a跨释,D)=(a胸私,(a,(a鳖谈,(…))))
D的長(zhǎng)度為2岁疼,第一個(gè)元素是原子,第二個(gè)元素是D自身缆娃,展開(kāi)后它是一個(gè)無(wú)限的廣義表
(2)廣義表的深度
一個(gè)表的"深度"是指表展開(kāi)后所含括號(hào)的層數(shù)捷绒。
【例】表L瑰排、A、B疙驾、C的深度為分別為1凶伙、2、3它碎、4函荣,表D的深度為∞。
廣義表的存儲(chǔ)結(jié)構(gòu)
廣義表中的元素可以是單元素扳肛,也可以是廣義表傻挂,因?yàn)榫哂胁煌慕Y(jié)構(gòu),所以用順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)的難度比較大挖息,因?yàn)楹茈y為每個(gè)廣義表分配固定大小的存儲(chǔ)空間金拒,所以通常采用鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)
廣義表的類型定義
廣義表可以分為兩個(gè)部分,頭部和尾部套腹,頭部是廣義表的第一個(gè)元素绪抛,尾部是廣義表的除第一個(gè)元素的其他子元素,也就是前面的GeneralizedNode.sublist和GeneralizedNode.next
廣義表的長(zhǎng)度
可以用遞歸實(shí)現(xiàn)电禀,即
1(頭部元素)+尾部元素的長(zhǎng)度幢码。
廣義表的深度
空表或僅由單元素構(gòu)成,則深度為1,可以用遞歸實(shí)現(xiàn),即
子表的最大深度+1
查找值為obj的元素
也用遞歸實(shí)現(xiàn)尖飞,當(dāng)當(dāng)前子元素為廣義表時(shí),則遞歸查找症副,否則為單元素,直接比較政基;依次遍歷完整個(gè)廣義表贞铣。
廣義表的創(chuàng)建
空表用#表示,如(#),廣義表的結(jié)束用;號(hào)表示沮明,例如: ? ? ? (a,(#),b,c,(d,(e)));