




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、3.2 棧的應用舉例3.2.5 表達式求值,算符優(yōu)先法: 4+2*3-10/5 = 4+6-10/5 = 10-10/5 =10-2 = 8 操作數(shù)(operand): 進OPND棧 操作符(operator): 進OPTR棧 界限符(delimiter):,算符間的優(yōu)先關系:,1 2+-*/()# + - * / ( # =,Precede: 判定運算符棧的棧頂運算符1與讀入的運算符2之間 的優(yōu)先關系的函數(shù). Operate: 進行二元運算ab的函數(shù).,算術表達式求值過程(算法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(); / 不是運算符則進棧 else switch(Precede(GetTop(OPTR),c) case : / 退棧并將運算結果入棧 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,對算術表達式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柱放臨時盤 要求:一次只能移動一個盤,大盤不可放于小盤上。,a,b,c,hanoi塔問題,定義函數(shù):movetower(n,a,c,b) n個盤ac,b放臨時盤 分三步: movetower(n-1,a,b,c) 將n-1個盤從a-b, c放臨時盤 movedisk(a,n,c) 將第n
5、個盤從a-c movetower(n-1,b,c,a) 將n-1個盤從b-c,a放臨時盤 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 隊列3.4.1抽象數(shù)據(jù)類型隊列的定義,隊列(Queue): 先進先出(First In First Out) (縮寫為FIFO)的線性表。 僅在隊尾進行插入和隊頭進行刪除操作的線性表。 隊頭(front): 線性表的表頭端,即可刪除端。 隊
6、尾(rear): 線性表的表尾端,即可插入端。,隊頭,對尾,.,a1,a2,a3,an-1,an,隊列的抽象數(shù)據(jù)類型,ADT Queue 數(shù)據(jù)對象:D = ai | ai屬于Elemset, (i=1,2,n, n0) 數(shù)據(jù)關系:R1 = ai-1,ai|ai-1,ai屬于D,(i=2,3,n) 約定an為隊尾, a1為隊頭。 基本操作: InitQueue( QueueTraverse(Q ,visit () ADT Queue,隊列的基本操作(之一),InitQueue (否則返回FALSE。 QueueLength(Q) 初始條件: 隊列Q已經(jīng)存在。 操作結果: 返回隊列Q中的數(shù)據(jù)元素個
7、數(shù), 即隊列Q的長度。 GetHead(Q, struct QNode *next; Qnode, *QueuePtr; typedef struct QueuePtr front; / 隊頭指針 QueuePtr rear; / 隊尾指針 LinkQueue; #define OK 1 #define OVERFLOW -1 #define ERROR 0,data,*next,front,rear,鏈隊列示意圖,(a)空隊列,(b)元素“趙”入隊列,(c)元素“錢”入隊列,(d)元素“趙”出隊列,鏈隊列的操作實現(xiàn)舉例/* InitQueue 構造一個空的隊列Q*/,Status InitQ
8、ueue(LinkQueue / InitQueue,鏈隊列的操作實現(xiàn)(DestroyQueue) / 銷毀隊列Q,Status DestroyQueue(LinkQueue / DestroyQueue,鏈隊列的操作實現(xiàn)(EnQueue) / 插入元素e為新的隊尾元素,Status EnQueue(LinkQueue / EnQueue,鏈隊列的操作實現(xiàn)(DeQueue)/ 若隊列不空, 刪除隊列Q 的隊頭元素并用e返回其值, 同時返回OK; 否則返回ERROR 。,Status DeQueue(LinkQueue / DeQueue,3.4.3 循環(huán)隊列 - 隊列的順序表示與實現(xiàn),采用順序
9、存儲結構 約定:1)初始空隊列:front = rear=0 ; 2)插入新的元素時, rear+; 3)刪除隊頭元素時,front+;,循環(huán)列表-解決數(shù)組越界但未占滿空間的辦法,當Q.rear Q.front時: Q.rear Q.front = 隊列中元素個數(shù) 當Q.rear Q.front時: Q.rear Q.front +maxsize = 隊列中元素個數(shù) 當Q.rear = Q.front時: 隊列是空或滿,循環(huán)隊列的頭尾指針,循環(huán)隊列-隊列的順序存儲結構實現(xiàn)(1),typedef struct QElemType *base; / 存儲空間基地址 int front; / 隊頭指針 int rear; / 隊尾指針 SqQueue; #define MAXSIZE 100 Status InitQueue(SqQueue / InitQueue,循環(huán)隊列-隊列的順序存儲結構實現(xiàn)(2),Status EnQ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建三明五縣2024~2025學年高一下冊聯(lián)合質(zhì)檢考試期中數(shù)學試題
- 時間壓力管理策略考核試卷
- 2025年中國LED雙基色異步屏數(shù)據(jù)監(jiān)測報告
- 2025年中國EVA亮膠紙墊數(shù)據(jù)監(jiān)測研究報告
- 2025年中國ABS床頭帶輪鋼板條面單搖床數(shù)據(jù)監(jiān)測報告
- 2025年中國2-巰基吡啶氧化物鈉鹽數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國高速真空油市場分析及競爭策略研究報告
- 2025至2030年中國防腐管接件市場分析及競爭策略研究報告
- 2025至2030年中國鋼膠釘市場分析及競爭策略研究報告
- 2025至2030年中國超音波流量計市場分析及競爭策略研究報告
- 2022年江蘇蘇州獨墅湖科教創(chuàng)新區(qū)管理委員會招聘筆試備考題庫及答案解析
- 事業(yè)單位崗位職數(shù)情況表
- 鉆沖孔灌注樁監(jiān)理實施細則
- 2023年中汽中心校園招聘筆試題庫及答案解析
- LS 8010-2014植物油庫設計規(guī)范
- GM/T 0021-2012動態(tài)口令密碼應用技術規(guī)范
- GB/T 28022-2021玩具適用年齡判定指南
- GB/T 20041.21-2017電纜管理用導管系統(tǒng)第21部分:剛性導管系統(tǒng)的特殊要求
- GB/T 19465-2004工業(yè)用異丁烷(HC-600a)
- GB/T 11832-2002翻斗式雨量計
- 防損培訓課程之一防損基礎知識
評論
0/150
提交評論