一、問題描述:
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 將符號 看作是頭節點,然後將是數值的...