版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、3.2 棧的應(yīng)用舉例3.2.5 表達(dá)式求值,算符優(yōu)先法: 4+2*3-10/5 = 4+6-10/5 = 10-10/5 =10-2 = 8 操作數(shù)(operand): 進(jìn)OPND棧 操作符(operator): 進(jìn)OPTR棧 界限符(delimiter):,算符間的優(yōu)先關(guān)系:,1 2+-*/()# + - * / ( # =,Precede: 判定運(yùn)算符棧的棧頂運(yùn)算符1與讀入的運(yùn)算符2之間 的優(yōu)先關(guān)系的函數(shù). Operate: 進(jìn)行二元運(yùn)算ab的函數(shù).,算術(shù)表達(dá)式求值過(guò)程(算法3.4)OperandType EvaluateExpression(),InitStack(OPTR); Push
2、(OPTR, #); InitStack(OPND); c = getchar(); While(c!=# | GetTop(OPTR)!=#) If(!In(c,OP) Push(OPND,c); c = getchar(); / 不是運(yùn)算符則進(jìn)棧 else switch(Precede(GetTop(OPTR),c) case : / 退棧并將運(yùn)算結(jié)果入棧 Pop(OPTR,theta); Pop(OPND,b);Pop(OPND,a); Push(OPND,Operate(a,theta,b); break; default: printf(“Expression error!”); r
3、eturn(ERROR); / switch / while return GetTop(OPND); / EvaluateExpression,對(duì)算術(shù)表達(dá)式3*(7-2)求值.,步驟 OPTR棧 OPND棧 輸入字符 主要操作 1 # 3 * ( 7 - 2 ) # Push(OPND,3) 2 # 3 * ( 7 - 2 ) # Push(OPTR,*) 3 # * 3 ( 7 - 2 ) # Push(OPTR,() 4 # * ( 3 7 - 2 ) # Push(OPND,7) 5 # * ( 3 7 - 2 ) # Push(OPTR,-) 6 # * ( - 3 7 2 ) #
4、Push(OPND,2) 7 # * ( - 3 7 2 ) # Operate(7,-,2) 8 # * ( 3 5 ) # POP(OPTR) 9 # * 3 5 # Operate(3,*,5) 10 # 15 # Return(GetTop(OPND),例:漢諾塔問(wèn)題: 將a柱子上的盤移到 c柱,用 b柱放臨時(shí)盤 要求:一次只能移動(dòng)一個(gè)盤,大盤不可放于小盤上。,a,b,c,hanoi塔問(wèn)題,定義函數(shù):movetower(n,a,c,b) n個(gè)盤ac,b放臨時(shí)盤 分三步: movetower(n-1,a,b,c) 將n-1個(gè)盤從a-b, c放臨時(shí)盤 movedisk(a,n,c) 將第n
5、個(gè)盤從a-c movetower(n-1,b,c,a) 將n-1個(gè)盤從b-c,a放臨時(shí)盤 void hanoi(int n, char a, char b, char c) if (n=1) move(a,1,c); else hanoi(n-1,a,c,b); move(a,n,c); hanoi(n-1,b,a,c); ,hanoi塔的遞歸算法,3.4 隊(duì)列3.4.1抽象數(shù)據(jù)類型隊(duì)列的定義,隊(duì)列(Queue): 先進(jìn)先出(First In First Out) (縮寫為FIFO)的線性表。 僅在隊(duì)尾進(jìn)行插入和隊(duì)頭進(jìn)行刪除操作的線性表。 隊(duì)頭(front): 線性表的表頭端,即可刪除端。 隊(duì)
6、尾(rear): 線性表的表尾端,即可插入端。,隊(duì)頭,對(duì)尾,.,a1,a2,a3,an-1,an,隊(duì)列的抽象數(shù)據(jù)類型,ADT Queue 數(shù)據(jù)對(duì)象:D = ai | ai屬于Elemset, (i=1,2,n, n0) 數(shù)據(jù)關(guān)系:R1 = ai-1,ai|ai-1,ai屬于D,(i=2,3,n) 約定an為隊(duì)尾, a1為隊(duì)頭。 基本操作: InitQueue( QueueTraverse(Q ,visit () ADT Queue,隊(duì)列的基本操作(之一),InitQueue (否則返回FALSE。 QueueLength(Q) 初始條件: 隊(duì)列Q已經(jīng)存在。 操作結(jié)果: 返回隊(duì)列Q中的數(shù)據(jù)元素個(gè)
7、數(shù), 即隊(duì)列Q的長(zhǎng)度。 GetHead(Q, struct QNode *next; Qnode, *QueuePtr; typedef struct QueuePtr front; / 隊(duì)頭指針 QueuePtr rear; / 隊(duì)尾指針 LinkQueue; #define OK 1 #define OVERFLOW -1 #define ERROR 0,data,*next,front,rear,鏈隊(duì)列示意圖,(a)空隊(duì)列,(b)元素“趙”入隊(duì)列,(c)元素“錢”入隊(duì)列,(d)元素“趙”出隊(duì)列,鏈隊(duì)列的操作實(shí)現(xiàn)舉例/* InitQueue 構(gòu)造一個(gè)空的隊(duì)列Q*/,Status InitQ
8、ueue(LinkQueue / InitQueue,鏈隊(duì)列的操作實(shí)現(xiàn)(DestroyQueue) / 銷毀隊(duì)列Q,Status DestroyQueue(LinkQueue / DestroyQueue,鏈隊(duì)列的操作實(shí)現(xiàn)(EnQueue) / 插入元素e為新的隊(duì)尾元素,Status EnQueue(LinkQueue / EnQueue,鏈隊(duì)列的操作實(shí)現(xiàn)(DeQueue)/ 若隊(duì)列不空, 刪除隊(duì)列Q 的隊(duì)頭元素并用e返回其值, 同時(shí)返回OK; 否則返回ERROR 。,Status DeQueue(LinkQueue / DeQueue,3.4.3 循環(huán)隊(duì)列 - 隊(duì)列的順序表示與實(shí)現(xiàn),采用順序
9、存儲(chǔ)結(jié)構(gòu) 約定:1)初始空隊(duì)列:front = rear=0 ; 2)插入新的元素時(shí), rear+; 3)刪除隊(duì)頭元素時(shí),front+;,循環(huán)列表-解決數(shù)組越界但未占滿空間的辦法,當(dāng)Q.rear Q.front時(shí): Q.rear Q.front = 隊(duì)列中元素個(gè)數(shù) 當(dāng)Q.rear Q.front時(shí): Q.rear Q.front +maxsize = 隊(duì)列中元素個(gè)數(shù) 當(dāng)Q.rear = Q.front時(shí): 隊(duì)列是空或滿,循環(huán)隊(duì)列的頭尾指針,循環(huán)隊(duì)列-隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)(1),typedef struct QElemType *base; / 存儲(chǔ)空間基地址 int front; / 隊(duì)頭指針 int rear; / 隊(duì)尾指針 SqQueue; #define MAXSIZE 100 Status InitQueue(SqQueue / InitQueue,循環(huán)隊(duì)列-隊(duì)列的順序存儲(chǔ)結(jié)構(gòu)實(shí)現(xiàn)(2),Status EnQ
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 富士康入職培訓(xùn)課件
- 家長(zhǎng)開學(xué)安全教育培訓(xùn)
- 家長(zhǎng)安全守法意識(shí)培訓(xùn)課件
- 流產(chǎn)與早產(chǎn)預(yù)防臨床全程管理指南
- 演出合同2026年合同評(píng)估協(xié)議
- 2026年電子商務(wù)平臺(tái)搭建合同協(xié)議
- 2026年母嬰用品知識(shí)產(chǎn)權(quán)轉(zhuǎn)讓合同協(xié)議
- 海上貨物運(yùn)輸合同2026年貨物放行協(xié)議
- 2026年通信線路標(biāo)準(zhǔn)化建設(shè)合同
- 家長(zhǎng)會(huì)安全培訓(xùn)課件
- 【低空經(jīng)濟(jì)】低空經(jīng)濟(jì)職業(yè)學(xué)院建設(shè)方案
- 假發(fā)材料購(gòu)銷合同范本
- 長(zhǎng)途代駕安全培訓(xùn)內(nèi)容課件
- 銷售團(tuán)隊(duì)激勵(lì)獎(jiǎng)金分配方案
- 四川省成都市樹德實(shí)驗(yàn)中學(xué)2026屆數(shù)學(xué)八上期末聯(lián)考試題含解析
- 2024年中小學(xué)生食品安全知識(shí)問(wèn)答題庫(kù)
- 收購(gòu)發(fā)票培訓(xùn)課件
- 《全過(guò)程工程咨詢方案》
- 巖石鉆拖管專項(xiàng)施工方案
- 交通運(yùn)輸行業(yè)數(shù)據(jù)集建設(shè)實(shí)施方案
- 年會(huì)禮儀小姐培訓(xùn)
評(píng)論
0/150
提交評(píng)論