資料結構3 2線性表的推廣 廣義表

2021-09-09 07:07:28 字數 1087 閱讀 2886

廣義表的資料元素本身也可以是乙個資料結構,但與陣列不同,廣義表的不同元素可以有不同的結構。廣義表是n個元素a1,a2,a3,…,an的有限序列,其中ai或者是原子項,或者是乙個廣義表。一般記為:

ls = (a1,a2,a3,…,an)

ls為廣義表的名字,n為廣義表的長度,若n為0,稱為空表。若ai是原子型的資料元素,則稱它為ls的原子;若ai是廣義表,則它稱為ls的子表。稱第乙個元素a1是ls的表頭,其餘元素組成的表(a2,a3,…,an)稱為ls的表尾

廣義表是一種遞迴的資料結構(在計算機程式語言中,遞迴型別(又名:遞迴定義、隱含型別或隱含定義)是一種特殊的資料型別,它表示自身內部可能包含其它的同樣型別的值。)

一般用大寫字母表示廣義表,小寫字母表示原子。例如:

1->a = ()——a是乙個空表,長度為0

2->b = (e)——b是乙個只有原子e的表,其長度為1

3->c = (a,(b,c,d))——c中有兩個元素,乙個是原子,另乙個是子表,c的長度是2

4->d = (a,b,c)——d中有三個元素,每個都是子表,其長度為3

5->e = (a,e)——e中有兩個元素,乙個是原子,另乙個是子表,e的長度是2,這是乙個遞迴的表

層次性:廣義表的元素可以是子表,而子表的元素還可以是子表

共享性:廣義錶可為其他表所共享。例如,在上述的4中abc為d的子表,則在d中可以不用列出其值,直接通過子表名稱引用

遞迴性:廣義表可以是其自身的乙個子表

稱乙個廣義表中括號巢狀的最大數為他的深度。如c的深度為2

通常為鏈式儲存結構,每個元素用乙個結點表示,需要兩種結構的結點:表結點和原子結點

廣義表結點定義

typedef

char elemtype;

typedef

struct node

ptr;

}val;

}gnode;

資料結構3 1線性表的推廣 陣列

陣列可看成一種特殊的線性表,其資料元素本身也是乙個線性表。假設乙個二維陣列a m n 有m行n列,那麼可以把這個二維陣列看成乙個線性表 a a0,a1 am 1 其中,每個元素ai是乙個行向量組成的線性表 ai ai 0,ai 1 ai n 1 0 i m 1 也可以看作是乙個由列向量組成的元素組成...

資料結構(線性表)

1.試寫一演算法,在無頭結點的動態單鏈表上實現線性表操作insert l,i,b 並和在帶頭結點的動態單鏈表上實現相同操作的演算法進行比較。status insert linklist l,int i,int b 在無頭結點鍊錶l的第 i個元素之前插入元素 belse insert 2.已知線性表中...

資料結構 線性表

參考 一 線性表 順序表 單鏈表 迴圈鍊錶 雙鏈表 順序表 1.表的初始化 void initlist seqlist l 2.求表長 int listlength seqlist l 3.取表中第i個結點 datatype getnode l,i 4.查詢值為x的結點 5.插入 具體演算法描述 v...