资料结构-堆叠与伫列

上传人:xzh****18 文档编号:56633882 上传时间:2018-10-14 格式:PPT 页数:21 大小:58.50KB
返回 下载 相关 举报
资料结构-堆叠与伫列_第1页
第1页 / 共21页
资料结构-堆叠与伫列_第2页
第2页 / 共21页
资料结构-堆叠与伫列_第3页
第3页 / 共21页
资料结构-堆叠与伫列_第4页
第4页 / 共21页
资料结构-堆叠与伫列_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《资料结构-堆叠与伫列》由会员分享,可在线阅读,更多相关《资料结构-堆叠与伫列(21页珍藏版)》请在金锄头文库上搜索。

1、資料結構,第三章 堆疊與佇列,大綱,第一節 堆疊 第二節 佇列,第一節 堆疊,一、定義 堆疊是一個有序串列,所有的加入(insert)與刪除(delete)動作均是在堆疊的頂端(top)進行,具有先進後出(FILO)或後進先出(LIFO)的特性。,第一節 堆疊,二、應用 1. 副程式的呼叫及返回處理。2. 遞迴程式的呼叫及返回處理。3. 算術式的轉換。4. 二元樹的走訪。5. 圖形的走訪。6. 中斷的處理。,第一節 堆疊,三、堆疊的工作定義 1. CREATE(S):建立一個空的堆疊。2. PUSH(data, S):將資料加入堆疊的頂端。3. POP(S):傳回堆疊頂端的資料,並將該筆資料自

2、堆疊中刪除。4. TOP(S):傳回堆疊頂端的資料,但不將該筆資料自堆疊中刪除。5. EMPTY(S):若堆疊內已無任何資料,就傳回真(true),否則就傳回假(false)。,第一節 堆疊,四、加入及刪除資料的演算法 將一筆資料加入堆疊中的演算法:Procedure PUSH(data, stack, n, top)If (topn) thenCall STACK-FULL( )Elsestack(top)datatoptop+1end ifend PUSH,第一節 堆疊,(1) data:代表欲加入堆疊中的資料。(2) stack:是一個指向堆疊起點的指標(pointer)。(3) n:記

3、錄堆疊的大小。(4) top:是一個指向堆疊頂端的指標,亦即指向堆疊中下一個可以再存放資料的指標。(5) STACK-FULL( ):是一個錯誤警告副程式,用來表示現在的堆疊已經滿了,無法再做加入資料的動作了。 (6) :表示將右邊的資料存入左邊所指的位置,所以“stack(top)data”表示將資料data存入stack + top所指的位置中。,第一節 堆疊,自堆疊中取出一筆資料,並刪除該筆資料的演算法:Procedure POP(stack, data, top)if ( top=1) thenCall STACK_EMPTY( )elsetop top-1data stack(top

4、)end ifend POP,第一節 堆疊,STACK_EMPTY( )是一個錯誤警告副程式,用來表示現在的堆疊已經是空的,無法再做取出或刪除資料的動作了。註:以上兩個演算法PUSH( )及POP( ),若陣列起始編碼是從1開始,則堆疊可以加入或刪除n筆資料;但若是從零開始,則演算法POP( )中之if判斷式須修改成if (top=0) then call STACK-EMPTY( ),如此即可加入或刪除n+1筆資料了。,第二節 佇列,一、定義 佇列是一個有序串列 (ordered list),所有的加入與刪除分別發生在串列的不同端,加入的一端稱為後端 (rear),而刪除的一端稱為前端 (f

5、ront),具有先進先出 (FIFO) 的特性。,第二節 佇列,二、應用 1. 作業系統的工作排程。2. 電腦的模擬(simulation)程式。3. 輸出入工作緩衝區(buffer)。,第二節 佇列,三、佇列的工作定義 1. CREATE(Q):建立一個空的佇列。2. ADDQ(data, Q):將資料加入佇列的尾端(rear)。3. DELETEQ(Q):傳回佇列前端(front)的資料,並將該筆資料自佇列中刪除。4. FRONT(Q):傳回佇列前端的資料,但不會將該筆資料自佇列中刪除。5. EMPTY(Q):若佇列為空的(empty),代表佇列內已無任何資料,因此就傳回真(true);否

6、則就傳回假(false),代表佇列不為空的,亦即佇列內尚有資料。,第二節 佇列,四、加入及刪除資料的演算法 將一筆資料加入佇列中的演算法: Procedure ADDQ(data, Q, n, rear)if (rearn) thencall QUEUE_FULL( )elseQ(rear)datarearrear+1end ifend ADDQ,第二節 佇列,(1) data:代表欲加入佇列中的資料。(2) Q:是一個指向佇列起點的指標。(3) n:記錄佇列的大小。(4) rear:是一個指向佇列尾端的指標。(5) QUEUE_FULL( ):是一個錯誤警告副程式,用來表示現在的佇列已經滿了

7、,無法再做加入資料的動作了。(6) :表示將右邊的資料存入左邊所指的位置,所以“Q (rear)data”表示將資料data存入到Q + rear所指的位置中。,第二節 佇列,自佇列中取出一筆資料,並刪除該筆資料的演算法: Procedure DELETEQ(Q, data, front, rear )if(front=rear) thencall QUEUE_EMPTY( )elsedataQ(front)frontfront+1end ifend DELETEQ,第二節 佇列,(1) front:是一個指向佇列前端的指標,與Q指標的差別是,Q指標不會任意改變,它永遠指向佇列開始的位置,但f

8、ront指標會隨資料自佇列中刪除而跟著做改變。(2) QUEUE_EMPTY( ):是一個錯誤警告副程 式,用來表示現在的佇列已經是空的,無 法再做取出或刪除資料的動作了。 註:以上兩個演算法ADDQ( )及DELETEQ( ),若陣列起始編號是從0開始,則可以加入或刪除n+1筆資料,若是從1開始,則可以加入或刪除n筆資料。,第二節 佇列,五、環狀佇列(Circular Queue) 將一筆資料加入circular queue中的演算法: Procedure ADDCQ(data, Q, n, front, rear)if(rear MOD n)+1=front) thencall QUEUE

9、_FULL( )else Q(rear)datarear(rear MOD n)+1end ifend ADDCQ,第二節 佇列,自circular queue 中取出一筆資料,並刪除該資料的演算法: Procedure DELETECQ(data, Q, n, front, rear)if(front =rear) thencall QUEUE_EMPTY( )elsedataQ(front)front(front MOD n) + 1end if end DELETECQ,第二節 佇列,以上兩個演算法ADDCQ( )及DELETECQ( ),若陣列起始編號是從1開始,則可以加入或刪除n個資

10、料;但若是從0開始,則演算法須分別修改如下:(n必須大於0 才有意義),第二節 佇列,Procedure ADDCQ(data, Q, n, front, rear)if (rear+1) MOD n=front) thencall QUEUE_FULL( )elseQ(rear)datarear(rear+1) MOD nend ifend ADDCQ,第二節 佇列,Procedure DELETECQ(data, Q, n, front, rear)if(front =rear) thencall QUEUE_EMPTY( )elsedataQ(front)front(front+1) MOD nend if end DELETECQ,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号