日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

5.4广义表的定义5.5广义表的存储结构

發布時間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.4广义表的定义5.5广义表的存储结构 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

廣義表是線性表的推廣。

廣義表一般記作LS=(α1,α2,...,αn)

n是它的長度αi可以是單個元素也可以說廣義表,分別稱為廣義表LS的原子和子表。

當廣義表LS非空時,稱第一個元素α1為LS的表頭(Head),其余元素組成的表(α2,α3...αn)是LS的表尾(Tail)


下面給出廣義表的列子:

1.A=()-空表,長度為0

2.B=(e)-列表B只有一個原子e,B的長度為1.

3.C=(a,(b,c,d))-列表C的長度為2,兩個元素分別是原子a和子表(b,c,d)

4.D=(A,B,C)-3個元素都是列表,子表是上面的ABC

5.E=(a,E)-這是一個遞歸的表,它的長度為2。E相當于一個無線的列表E=(a,(a,(a...)))。


下面給出廣義表圖D
? ?


5.5廣義表的存儲結構:


下面給出廣義表的尾鏈表存儲表示:

結構圖如下:


代碼如下:

#define AtomType int typedef enum{ATOM,LIST}ELemTag; //ATOM==0:原子,LIST==1:子表 typedef struct GLNode{ELemTag tag; //公共部分,用于區分原子結點和表結點union{AtomType atom; //atom是原子節點的值域,AtomType由用戶定義struct{struct GLNode *hp, *tp;//ptr是表結點的指針域,ptr.hp和ptr.tp分別指向表頭和表尾}ptr;}; }*GList; 下面來分析下:

enum 為枚舉類型,這個的作用是:比如說我們的程序中處理問題時與星期幾有關,可能要將星期一轉換為數字1,星期二轉換為數字2,一直到數字7,在不用enum關鍵字的情況下,可以使用define來定義,但是大家會覺得很麻煩,因為你要一個一個的定義,星期的還好說,只有7天,如果是月份呢,一年有12個月份,那就要寫12個define,非常的不方面,如果利用enum的話就會非常的方便。

下面的union

關于union比較多,大家可以把他直接當成struct,如果想具體了解請點擊下面的鏈接

http://blog.csdn.net/qq78442761/article/details/54985317



? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

下面給出的這個圖是剛剛上面說的ABCDE5個例子的存儲結構:


1.A=()-空表,長度為0

2.B=(e)-列表B只有一個原子e,B的長度為1.

3.C=(a,(b,c,d))-列表C的長度為2,兩個元素分別是原子a和子表(b,c,d)

4.D=(A,B,C)-3個元素都是列表,子表是上面的ABC

5.E=(a,E)-這是一個遞歸的表,它的長度為2。E相當于一個無線的列表E=(a,(a,(a...)))。



下面給出另一種節點結構的鏈表表示列表,圖如下:


下面是代碼:

#define AtomType int typedef enum{ATOM,LIST}ELemTag; //ATOM==0:原子,LIST==1:子表 typedef struct GLNode{ELemTag tag; //公共部分,用于區分原子結點和表結點union{ //原子結點和表結點的聯合AtomType atom; //原子結點的值域struct GLNode *hp; //表結點的表頭指針};struct GLNode *tp; //相當于線性鏈表的next,指向下一個元素結點 }*GList; //廣義表類型GList是一種擴展的線性鏈表 圖如下:

1.A=()-空表,長度為0

2.B=(e)-列表B只有一個原子e,B的長度為1.

3.C=(a,(b,c,d))-列表C的長度為2,兩個元素分別是原子a和子表(b,c,d)

4.D=(A,B,C)-3個元素都是列表,子表是上面的ABC

5.E=(a,E)-這是一個遞歸的表,它的長度為2。E相當于一個無線的列表E=(a,(a,(a...)))。







總結

以上是生活随笔為你收集整理的5.4广义表的定义5.5广义表的存储结构的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。