C 資料結構 廣義表和遞迴

2021-08-19 22:07:55 字數 2099 閱讀 6273

廣義表是線性表的推廣。定義是:乙個廣義表是n個元素的乙個有限序列。差不多就是線性表元素裡面還有線性表,這個表裡面的元素稱為原子,如果這個原子也是線性表稱之為子表。表示為:gl=(a1,a2,a3.....an)。和我們windows下面的檔案、樹結構有點類似

特點:1.乙個廣義表種資料元素可以是原子,也可以是子表

2.廣義表的資料元素是有限個,資料元素有相對的順序

3.廣義表的長度定義為最外層包含的元素個數

4.廣義表的深度為所有括號的重數,如果原子深度為0,空表的深度為1

5.廣義表可以共享,這種廣義表稱為再入錶

6.廣義表可以是乙個遞迴表,遞迴表的深度是無限,長度是有限的

7.非空廣義表分為表頭(第乙個元素)和表尾(第乙個元素後面的元素),所以,空表是不可以求表頭表尾的

(1)a = (),a是乙個空表,表的長度為0,沒有表頭和表尾。

(2)b = (a,b),b是乙個只包括原子的表,稱為線性表,表的長度為2,表頭是a,表尾是(b)(表尾還是乙個表,其表頭是b,表尾是空表())。

(3)c = (c,(d,e,f)),c是乙個包括乙個原子和乙個子表的表,表的長度為2,表頭是c,表尾是((d,e,f))(表尾還是乙個表,其表頭是(d,e,f),表尾是空表())。

(4)d = (b,c,a) = ((a,b),(c,(d,e,f)),()),d是乙個包括三個子表的表,表的長度為3,表頭是b,表尾是(c,a)。

(5)e = (b,d) = ((a,b),(b,c,a)) = ((a,b),((a,b),(c,(d,e,f)),())),e是乙個包括兩個子表的表,表的長度為2,表頭是b,表尾是(d)。

(6)f = (g,f) = (g,(g,(g,(…)))),f是乙個包括乙個原子和乙個子表的表,表的長度為2,表頭是g,表尾是(f)(表尾還是乙個表,其表頭是(f),表尾是空表()),對於表頭來說出現了遞迴。

在實現廣義表之前我們要了解乙個東西,遞迴。因為廣義表和樹比較相似,所以樹那一塊用遞迴比較多。什麼是遞迴?講的通俗點就是

傳遞、回歸,舉個例子

static void main(string args)

public static int addsums(int i)

傳遞:瘋狂的呼叫addsums(int i)這個函式

第一步:addsums(3)-->3+addsums(2)

第二步:addsums(2)-->2+addsums(1)

第三步:這裡,我們發現i<=1是真,所以:addsums(1)-->1

回歸:我們不能一直調這個函式,我們趕緊return回來

第四步:輸出addsums(1)

第四步:這裡addsums(1)我們知道是等於1的,那麼addsums(2)是不是就是2+1

第五步:addsums(3)是不是3+上面的2+1,return 3+3

下面我們來建立廣義表:

class glnode

廣義表的操作,深度和長度,我們會發現這裡的操作都是需要使用遞迴:

class gentableclass

public glnode creategl(string str, ref int i)

else if (ch == ')')//子表結束

else if (ch == '#')//空表

else//原子

}else//串結束

if (imax)

}glnode = glnode.link;

}return (max + 1);

}#endregion

}

資料結構 廣義表

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

資料結構 廣義表

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

資料結構 廣義表

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