資料結構 廣義表

2021-07-15 08:49:07 字數 1150 閱讀 1781

概念:陣列和廣義表可以看成是線性表在下述含義上的擴充套件,表中資料元素本身也是乙個資料結構。

廣義表也可以看作是線性表的推廣。

(1)廣義表的元素可以是子表,而子表的元素還可以包含子表。

(2)列表可以被其他列表所共享。

(3)列表可以是乙個遞迴的表,也就是說列表也可以是自身的子表。

由於廣義表裡面的資料元素可以具有不同的結構,所以使用的是鏈式儲存結構,乙個結點表示乙個資料元素。

我在這裡對於廣義表結點的構造如下:(可能與書上不一致但是我較為習慣,功能一致)

三個域:標誌域(元素型別的標誌,0表示頭結點,1表示int,2表示char,3表示子表)

資料域(依照標誌域而資料不同,如果是頭結點,則放的是指標計數)

指標域(指向下乙個結點)

typedef enum[head = 0,int = 1,char = 2,list = 3]  nodetype;//用列舉表示型別

struct gennode;//先宣告一下結構體

typedef union

int ref;

int intinfo;

char charinfo;

gennode* hlink;

}elemtype;//用的是聯合體,這樣子節省空間

struct gennode

nodetype utype;

elemtype value;

gennode *tlink;

有了這樣乙個結構體,接下來

(1)獲得頭結點

(2)獲得普通結點

(3)依照相應元素想辦法初始化廣義表

(4)實現增刪查改等操作

(5)注意不要發生記憶體洩漏

可以用字串賦值的方式進行

對於廣義表的構造,我學到的方式是通過類來構造,想來如果非要用結構體也是可以得。

可以通過建構函式來初始化廣義表,引數形式就如上述所說可以是字串

那麼接下來的難題就只存在於如何把字串分解開來然後作為乙個個結點的資料構造出我們需要的廣義表,由於能學到廣義表,那我想鍊錶方面應該都很熟練了,鍊錶的構造新增什麼的我就都不說了,唯一有可能有難度的就是子表的遞迴建立了,但是知道是用遞迴接著往上面靠就好了,如果要檢驗輸出那麼子表也要用遞迴的方式輸出最佳,所以廣義表相較於之前的資料結構其實不同的也就只是在於我們對於遞迴的運用而已。

資料結構 廣義表

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

資料結構 廣義表

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

資料結構 廣義表

根據表頭 表尾的定義可知 任何乙個非空廣義表的表頭是表中第乙個元素,它可以是原子,也可以是子表,而其表尾必定是子表。也就是說,廣義表的head操作,取出的元素是什麼,那麼結果就是什麼。但是tail操作取出的元素必須外加乙個表 舉乙個簡單的列子 已知廣義表ls a,b,c d,e,f 如果需要取出這個...