32 資料結構筆記之三十二廣義表實現一

2021-08-08 13:21:34 字數 1545 閱讀 2810

32.資料結構筆記之三十二廣義表實現一

「誰要是遊戲人生,他就一事無成;誰不能主宰自己,永遠是乙個奴隸。

--歌德」

我們來看下廣義表的**實現。

輸入乙個數字,呼叫函式creatglist建立廣義表。

廣義表的內容是乙個char,超過乙個char就失效。

typedef

struct

gnode

val;

struct

gnode

*link; }*

gnode

;createglist函式,引數是我們輸入的乙個數字。

如果不是『\0』,建立乙個頭節點(malloc)。

如果是』(『 表示是子表,則設定tag為1,建立子錶鏈

否則為tag為0。

然後讀取下一字元,如果不是『,』則設定為null。

gnode

creatglist(

char*s

) else

if(ch==

')')  h=

null;

else

} else

h=null;

ch=*s;

s++;

if(h!=

null)

returnh;

} 判斷廣義表是否為空。

計算廣義表的長度。

複製廣義表。

向廣義表中插入乙個字元。

計算廣義表的深度。

輸出廣義表。

刪除第乙個元素。

#include

#include

#define ok 1

#define error -1

#define status int

typedef struct gnode

val;

struct gnode *link;

} *gnode;

gnode creatglist(char *s)

else if(ch==')')  h=null;

else

}else h=null;

ch=*s;

s++;

if(h!=null)

return h;

}void output(gnode h)

else

printf("%c",h->val.atom);

if(h->tag==1)

printf(")");

if(h->link!=null)}}

void empty(gnode h)

int length(gnode h)

gnode copy(gnode h)

void insert(gnode &h,char e)

int depth(gnode h)

h=h->link;

}return max+1;

}void delfirstnode(gnode &h)

void main()

資料結構 廣義表

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

資料結構 廣義表

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

資料結構 廣義表

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