C語言數據結構——廣義表

C語言數據結構中,廣義表和數組一樣,也是線性表的一種推廣!

廣義表的定義:
廣義表 LS 爲n(n≥0)個元素的有窮序列,記作:
LS = (d1, d2, … dn)
其中:
di:或爲原子項(爲具體數值,用小寫字母表示);或爲子廣義表(簡稱子表,用大寫字母表示)。
n:爲廣義表的長度;當n等於0時,廣義表LS爲空表。
當LS不爲空時,即(n≥1時),稱d1爲表頭(head)剩餘所有元素構成的子表(d2, d3, …dn)稱爲表尾(tail)

廣義表的基本操作:
1.計算表頭函數head(LS),定義如下:
在這裏插入圖片描述
2.計算表尾函數tail (LS),定義如下:
在這裏插入圖片描述
3.計算表深度函數depth (LS),定義如下:
在這裏插入圖片描述
結合實例理解:
在這裏插入圖片描述
廣義表的存儲結構:
廣義表LS = (d1, d2, …,dn)中的數據元素di或是原子,或是子廣義表,具有不同的結構,很難用順序存儲結構表示,通常採用鏈式存儲結構來表示。

鏈式存儲結構主要有兩種方法:

1.頭、尾鏈表存儲結構;
策略:根據廣義表的head和tail操作定義對數據元素進行分割和存儲組織。
tag=1表示表結點;tag=0表示原子結點;在表結點中包含兩個指針域,分別爲hp(指示表頭)和tp(指示表尾)。
在這裏插入圖片描述
頭尾鏈表存儲的特徵:
在這裏插入圖片描述
頭尾鏈表存儲結構的實例:
在這裏插入圖片描述

2.擴展線性鏈表存儲結構。
策略:對鏈表結構進行擴展,元素結點除支持存儲原子數據外,可對子廣義表進行組織管理。
在這裏插入圖片描述
擴展線性鏈表存儲結構的特徵:
在這裏插入圖片描述
擴展線性鏈表存儲結構的實例:
在這裏插入圖片描述
總結:
廣義表的特點:
1.爲遞歸結構;
2.數據元素宏觀爲線性關係。
廣義表的存儲方案: 1.有兩種存儲方案:頭尾鏈表存儲結構和擴展線性鏈表存儲結構; 2…可表達廣義表的遞歸結構,並體現數據元素直接的關係; 3.存儲方案並不唯一。