資料結構廣義表實驗

2022-07-17 04:36:08 字數 3977 閱讀 8539

一、問題描述:

1、題目內容:識別廣義表的「頭」或「尾」的演示

寫乙個程式,建立廣義表的儲存結構,演示在此儲存結構上實現的廣義表求頭/求尾操作序列的結果。

2、基本要求

(1)設乙個廣義表允許分多行輸入,其中可以任意地輸入空格符,原子是不限長的僅字母或數字組成的串。

(2)廣義表採用如教材中結點的儲存結構,試按表頭和表尾的分解方法編寫建立廣義表儲存結構的演算法。

(3)對已建立儲存結構的廣義表施行操作,操作序列為乙個僅由「t「或」h」組成的串,它可以是空串(此時印出整個廣義表),自左至右施行各操作,再以符號形式顯示結果。

**:

1

//panda2//

2013-4-24

34 typedef char

elemtype;56

//定義結點

7struct

glnode8;

15 glnode* next;//

指向後續結點指標域

16};

1718

class

glist19;

41//

panda

42//

2013-4-24

4344

45 #include"

glist.h

"46 #include47

using

namespace

std;

4849

//50

//建構函式

51//

52glist::glist()53;

60//

61//

析構函式

62//

63 glist::~glist()64;

67//

68//

通過輸入構建廣義表

69//

ok

///以#結束輸入

/// 真正的廣義表指標是gl->sublist

70//

廣義表的頭指標需要處理head=gl->sublist;

71void glist::createglistbyinput(glnode*&gl)

72else

if (ch=='

)')//

這裡遇到),則表明為空表

88else

//不是子表,輸入資料

////////////

/ )?

99104

105if (ifinputover)//

沒結束輸入

106else

//輸入完畢

110115

116//

若為,則遞迴構造後續表

117if (ch==','

)118

else

if (ch==')'

)121

128//

debug

129 --i;//

回到呼叫前的數值

130};

131//

132//

獲得廣義表深度

133//

134int glist::getdepth(glnode*gl)

135147

}148 gl=gl->next;

149}

150return max+1

;151

};152

//153

//獲得廣義表的長度

154//

155int glist::getlength(glnode*gl)

156else

162165

};166

//167

//清空廣義表

168//

169void

glist::clearglist()

170;

173//

174//

列印廣義表

175//

ok176

void glist::printglist(glnode*gl)

177else

186189 cout<<')'

;190 }else

//輸入資料結點

191194

if (gl->next!=null)

195199

};200

//201

//h操作

202//

ok203 glnode* glist::printheadnode(glnode*head)

204209

//deal glist

210if (head->tag==true

)211

else

218221

}222

223 }else

if (head->tag==false

)224

227228

//output glist

229printglist(head);

230 cout<<','

;231

232if (head->tag==true

)233

238return head->sublist;

239 }else

if (head->tag==false

)240

243};

244//

245//

t操作246

//ok

247 glnode* glist::printtailnode(glnode*tail)

248253

//deal glist

254if (tail->tag==true

)255

else

263266 }else

if (tail->sublist->tag==false

)267

270271 }else

if (tail->tag==false

)272

275276

//output glist

277printglist(tail);

278 cout<<','

;279

280281

if (tail->tag==true

)282

else

if (tail->sublist->tag==true&&tail->sublist->next!=null)

287291

return tail->sublist;

292 }else

if (tail->tag==false

)293

296};

297/////////////////////////////////

298//

遞迴函式,只能一步一步的除錯了

299300 #include"

glist.h

"301 #include302

using

namespace

std;

303304

void inputstring(char *ch,int

size)

305316

if (i317else

320323

}324

};325

326int

main()

327else

if (tempch=='

t'||tempch=='t'

)346

else

if (tempch=='\0'

)349

else

352356

}357

358 system("

pause");

359return0;

360 }

資料結構 廣義表

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

資料結構 廣義表

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

資料結構 廣義表

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