資料結構廣義表中表頭與表尾的相關問題

2021-07-30 08:19:48 字數 902 閱讀 3519

最近在學習資料結構,用的教材是嚴老師的《資料結構》(c語言版),學習到廣義表這節時,遇到點疑問,查資料無果,故寫此部落格,望大神們多多指教!

廢話少說,在廣義表一般記作ls = (a1, a2, ...,an),ai(1 <= i <= n)可以是單個元素,也可以是廣義表。當廣義表ls非空時,稱第乙個元素a1為ls的表頭,稱其餘元素組成的表(a2, a3, ..., an)是ls的表尾。由定義可知,非空廣義表ls的表尾一定還是廣義表。分別定義兩個函式,gethead(l)為取表頭函式,gettail(l)為取表尾函式,例如:

l = (a, (b , c, d)),則gethead(l) = a,gettail(l) = ((b, c, d)).

假如廣義表的儲存方式定義如下:

typedef enum  elemtag; //atom==0:原子,list==1:子表

typedef struct glnode

ptr;

};}*glist;

下面是gethead(l)與gettail(l)的實現**:

glist gethead(glist l)

glist gettail(glist l)

取表頭函式沒有什麼疑問,在取表尾函式中,直接返回指向表尾的指標,如果是這樣實現,則在上面的例子中gettail(l) = (b, c, d),這與定義不符合,查了很多資料上的實現,實現的思路基本都是這樣。如果只是為了實現起來比較容易,在用的時候就需要注意了,例如,在求廣義表深度時,把廣義表分解成表頭和表尾兩個部分,如下:

int glistdepth(glist l)

以上只是我的理解, 如有不對的地方,請多多給指教!

廣義表的表頭表尾

把好久之前的c語言的知識記錄整理傳送下表頭表尾 head 返回列表的第乙個元素 tail 返回列表的刪去第乙個元素之後的剩餘列表 已知廣義表 a a,b b a,a c a,b,a b 求下列運算的結果 tail head tail c 所以,tail c b,a b head tail c hea...

資料結構 廣義表

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

資料結構 廣義表

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