版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
第三章棧?
3.1什么是棧3.2鏈棧
3.3棧的應(yīng)用舉例棧棧一、什么是棧棧:限定僅在一端進(jìn)行插入或刪除操作的線性表ana1a2……...棧底棧頂出棧(彈棧)進(jìn)棧(壓棧)棧s=(a1,a2,……,an)
a1為棧底元素
an為棧頂元素
不含元素的棧稱空棧二、棧的特點根據(jù)棧的定義可知,最先放入棧中元素在棧底,最后放入的元素在棧頂,而刪除元素剛好相反,最后放入的元素最先刪除,最先放入的元素最后刪除。
特點
:后進(jìn)先出
也就是說,棧是一種后進(jìn)先出的線性表,簡稱為LIFO(LastInFirstOut)表。例1:有一個棧,進(jìn)棧序列為A、B、C,試給出所有可能的出棧序列。A進(jìn)A出B進(jìn)B出C進(jìn)C出ABC不可能產(chǎn)生輸出序列CABA進(jìn)A出B進(jìn)C進(jìn)C出B出A進(jìn)B進(jìn)B出A出C進(jìn)C出A進(jìn)B進(jìn)B出C進(jìn)C出A出A進(jìn)B進(jìn)C進(jìn)C出B出A出CBAACB
BACBCA例2:一個棧的輸入序列是12345,若在入棧的過程中允許出棧,則棧的輸出序列43512可能實現(xiàn)嗎?12345的輸出呢?
43512不可能實現(xiàn),主要是其中的12順序不能實現(xiàn)
12345的輸出可以實現(xiàn),壓入一個立即彈出一個即可三、棧的抽象數(shù)據(jù)類型ADTStack{數(shù)據(jù)對象:D={ai|ai∈ElemSet,i=1,2,...,n,n≥0}數(shù)據(jù)關(guān)系:R={<ai-1,ai>|ai-1,ai∈D,i=2,...,n}
約定an端為棧頂,a1端為棧底?;静僮鳎?/p>
InitStack(&S)//操作結(jié)果:構(gòu)造一個空棧S。
DestroyStack(&S)
//操作結(jié)果:棧S被銷毀。
ClearStack(&S)
//操作結(jié)果:將S清為空棧
StackEmpty(S)
//操作結(jié)果:若棧S為空棧,則返回TRUE,否則FALSE。
StackLength(S)
//操作結(jié)果:返回S的元素個數(shù),即棧的長度。
GetTop(S,&e)
//操作結(jié)果:用e返回S的棧頂元素。
Push(&S,e)
//操作結(jié)果:插入元素e為新的棧頂元素。
Pop(&S,&e)
//操作結(jié)果:刪除S的棧頂元素,并用e返回其值。}//ADTStack
3.1什么是棧
3.2鏈棧
3.3棧的應(yīng)用舉例棧棧
3.1什么是棧?
3.2鏈棧
3.3棧的應(yīng)用舉例棧棧一、什么是鏈棧棧的鏈?zhǔn)酱鎯Y(jié)構(gòu)簡稱為鏈棧。
注意鏈表中指針的方向是從棧頂?shù)綏5?/p>
沒有頭結(jié)點?……棧頂指針S棧頂棧底ana1因為棧的所有操作在棧頂進(jìn)行,所以可以不需要頭結(jié)點,棧頂指針就相當(dāng)于鏈表的頭指針typedef???SElemType
//由實際需要決定typedefstructSNode{SElemTypedata;structSNode*next;}SNode,*LStack;二、鏈棧的結(jié)構(gòu)類型LStackS;//定義指向結(jié)點的指針sStatusInitStack(LStack&S)StatusGetTop(LStackS,SElemType&e)StatusPush(LStack&S,SElemTypee)StatusPop(LStack&S,SElemType&e)二、鏈棧的基本操作
(7鏈棧.cpp)
StatusInitStack(LStack&S){//構(gòu)造一個空棧S
S=NULL;returnOK;}S……
S棧頂棧底ana1一個空的鏈棧什么樣???StatusGetTop(LStackS,SElemType&e){//
若棧不空,則用e返回S的棧頂元素,并返回OK,否則返回ERRORS96
if(!S)returnERROR;
e=S->data;returnOK;}StatusPush(LStack&S,SElemTypee)S96pe=22{//插入元素e為新的棧頂元素
LStackp;p=(LStack*)malloc(sizeof(SNode));if(!p)exit(OVERFLOW);p->data=e;p->next=S;S=p;returnOK;}StatusPop(LStack&S,SElemType&e){//若棧不空,則刪除S的棧頂元素,用e返回其值,
//并返回OK;否則返回ERROR}p2S96e=2
LStackp;if(!S)returnERROR;//
s是空棧
e=S->data;p=S;S=p->next;free(p);
returnOK;
3.1什么是棧
3.2順序棧
3.3鏈棧?3.4棧的應(yīng)用舉例棧棧例二、括號匹配的檢驗假設(shè)表達(dá)式中允許包含兩種括號:圓括號和方括號,其嵌套的順序隨意,即([]())或[([][])]等為正確的格式,[(])或([())或()])均為不正確的格式。檢驗括號是否匹配的方法可用"期待的急迫程度"這個概念來描述。例如考慮下列括號序列:
[([][])]12345678分析可能出現(xiàn)的不匹配的情況:到來的右括弧非是所“期待”的;到來的是“不速之客”;直到結(jié)束,也沒有到來所“期待”的。檢驗括號是否匹配的方法可用"期待的急迫程度"這個概念來描述。4matching.cppstatusmatching(string&exp){intstate=1;//狀態(tài)標(biāo)志1表示正常0表示異常
while(i<=length(exp)&&state){switch(exp[i])//i表達(dá)式的第幾個元素
{case“(":{Push(S,exp[i]);i++;break;}case“)”:{ if(!StackEmpty(S)&&GetTop(S)="("){Pop(S,e);i++;}else{state=0;}break;}……}//switch}//whileif(state&&StackEmpty(S))returnOK;elsereturnERROR;}例三、行編輯程序接受用戶從終端輸入的程序或數(shù)據(jù),并存入用戶的數(shù)據(jù)區(qū)。如果每接受一個字符即存入用戶數(shù)據(jù)區(qū),做法并不恰當(dāng)。較好的做法是,設(shè)立一個輸入緩沖區(qū),用以接受用戶輸入的一行字符,然后逐行存入用戶數(shù)據(jù)區(qū)。允許用戶輸入出差錯,并在發(fā)現(xiàn)有誤時可以及時更正。例如,可用一個退格符“#”表示前一個字符無效;可用一個退行符“@”,表示當(dāng)前行中的字符均無效。例如,假設(shè)從終端接受了這樣兩行字符:whli##ilr#e(s#*s)while(*s)outcha@putchar(*s=#++);則實際有效的是下列兩行:while(*s)putchar(*s++);5lineEdit.cppvoid
LineEdit(){InitStack(S); ch=getchar();while(ch!=EOF)//EOF為全文結(jié)束符
{
while(ch!=EOF&&ch!='\n'){switch(ch)
{case‘#’:Pop(S,c);break;//僅當(dāng)棧非空時退棧
case'@':ClearStack(S);break;//重置S為空棧
default
:Push(S,ch);break;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司后勤工作計劃
- 團(tuán)領(lǐng)導(dǎo)講話稿范文6篇
- 禮賓員2024年終總結(jié)(7篇)
- 2024年攜手發(fā)展:合伙投資合同范例
- 知識探索指南模板
- 花店企業(yè)規(guī)劃方案
- 南通電商倉庫租賃合同范例
- 串并聯(lián)電路中電壓的規(guī)律課件
- 2024年新修訂房地產(chǎn)開發(fā)商合作合同
- 出租唐裝店鋪合同范例
- 新疆烏魯木齊市第十一中學(xué)2024-2025學(xué)年八年級上學(xué)期期中道德與法治試卷
- 2024年江西省高考地理真題(原卷版)
- 部編版小學(xué)五年級上冊道法課程綱要(知識清單)
- 經(jīng)濟(jì)法學(xué)-計分作業(yè)一(第1-4章權(quán)重25%)-國開-參考資料
- 山東省臨沂市(2024年-2025年小學(xué)四年級語文)人教版期中考試(上學(xué)期)試卷及答案
- 護(hù)士2024思想?yún)R報5篇
- 2024年新版全員消防安全知識培訓(xùn)
- Unit+10+Lesson+1+How+Closely+Connected+Are+We 高中英語北師大版(2019)選擇性必修第四冊
- 2024人教版道法七年級上冊第二單元:成長的時空大單元整體教學(xué)設(shè)計
- 《一起來分類》(教學(xué)設(shè)計)-2024-2025學(xué)年一年級上冊數(shù)學(xué)北師大版
- 肺脹(慢性阻塞性肺病)中醫(yī)優(yōu)勢病種診療方案
評論
0/150
提交評論