版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
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á)式求值過程(算法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),例:漢諾塔問題: 將a柱子上的盤移到 c柱,用 b柱放臨時(shí)盤 要求:一次只能移動(dòng)一個(gè)盤,大盤不可放于小盤上。,a,b,c,hanoi塔問題,定義函數(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的長度。 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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版農(nóng)業(yè)科技示范園區(qū)用地租賃管理協(xié)議3篇
- 二零二五版加油站油罐區(qū)安全防護(hù)設(shè)施裝修協(xié)議2篇
- 2025年度高科技產(chǎn)品研發(fā)與技術(shù)轉(zhuǎn)讓合同協(xié)議書4篇
- 2025年度綠色生態(tài)示范區(qū)植被養(yǎng)護(hù)合作協(xié)議4篇
- 二零二五版磚廠承包與新能源利用合作協(xié)議3篇
- 二零二五年度樓欄桿安裝工程進(jìn)度款支付合同4篇
- 2025年度毛紗買賣合同棉紗品牌授權(quán)使用合同4篇
- 2025年度高端慶典活動(dòng)專用舞臺(tái)租賃及現(xiàn)場布置合同3篇
- 2025版離婚協(xié)議書范本:房產(chǎn)買賣合同分割及補(bǔ)償細(xì)則4篇
- 二零二五版公司與個(gè)人租賃合同涉及租賃房產(chǎn)租賃期限調(diào)整3篇
- 2024年紀(jì)檢監(jiān)察綜合業(yè)務(wù)知識(shí)題庫含答案(研優(yōu)卷)
- 科室醫(yī)療質(zhì)量與安全管理小組工作制度
- 中華民族共同體概論課件第五講大一統(tǒng)與中華民族共同體初步形成(秦漢時(shí)期)
- 初二生地會(huì)考試卷及答案-文檔
- 私營企業(yè)廉潔培訓(xùn)課件
- 施工單位值班人員安全交底和要求
- 中國保險(xiǎn)用戶需求趨勢(shì)洞察報(bào)告
- 數(shù)字化轉(zhuǎn)型指南 星展銀行如何成為“全球最佳銀行”
- 中餐烹飪技法大全
- 靈芝孢子油減毒作用課件
- 現(xiàn)場工藝紀(jì)律檢查表
評(píng)論
0/150
提交評(píng)論