Add 3122021 7 Delete 3122021 8 2 Add

  • Slides: 44
Download presentation

【Add之演算法】 3/12/2021 7

【Add之演算法】 3/12/2021 7

【Delete之演算法】 3/12/2021 8

【Delete之演算法】 3/12/2021 8

2. 將資料加入佇列(Add動作): 將資料(item)加入到Queue中;成為Rear端元素。如果佇列已滿,則無法進行。 方法:Add(item, Queue) 製作: Procedure Add (item, Queue) begin if (Rear=N-1) Queue

2. 將資料加入佇列(Add動作): 將資料(item)加入到Queue中;成為Rear端元素。如果佇列已滿,則無法進行。 方法:Add(item, Queue) 製作: Procedure Add (item, Queue) begin if (Rear=N-1) Queue Is Full; //Queue已滿 else { Rear=Rear+1; Queue[Rear]=item; } end 3/12/2021 14

3. 刪除資料(Delete動作): 指刪除Queue的Front頭端元素,如果Queue是空,則無法進行。 方法:Delete(item, Queue) 製作: Procedure Delete(item, Queue) begin if (Front=Rear) Queue Is

3. 刪除資料(Delete動作): 指刪除Queue的Front頭端元素,如果Queue是空,則無法進行。 方法:Delete(item, Queue) 製作: Procedure Delete(item, Queue) begin if (Front=Rear) Queue Is Empty; //Queue為空 else { Front=Front+1; item=Queue[Front]; } end 3/12/2021 16

4. 判斷佇列是否已滿: 若使用陣列時,判斷Queue是否已滿(亦即Rear是否等於N-1), 若是則傳回True,否則傳回False。 方法:Is. Full(Queue) 製作: Procedure Is. Full (Queue) begin if (Rear=N-1)

4. 判斷佇列是否已滿: 若使用陣列時,判斷Queue是否已滿(亦即Rear是否等於N-1), 若是則傳回True,否則傳回False。 方法:Is. Full(Queue) 製作: Procedure Is. Full (Queue) begin if (Rear=N-1) return True; //Queue已滿 else return False; //Queue尚未滿 end 【缺點】在佇列中,當Rear=N-1時,並不能保證Queue真的已滿。 3/12/2021 18

【分析原因】 在上圖中,判斷佇列是否為滿的副程式Is. Full(Queue),必須要額外增加一個 判斷條件為:if (Front=-1),否則像上圖中,尚有2個空間,而結果卻為滿。 Procedure Is. Full(Queue) begin if (Rear=N-1) And (Front=-1) Front=-1

【分析原因】 在上圖中,判斷佇列是否為滿的副程式Is. Full(Queue),必須要額外增加一個 判斷條件為:if (Front=-1),否則像上圖中,尚有2個空間,而結果卻為滿。 Procedure Is. Full(Queue) begin if (Rear=N-1) And (Front=-1) Front=-1 return True; //Queue已滿 else return False; //Queue尚未滿 end 3/12/2021 19

5. 判斷佇列是否是空的: 若使用陣列時,判斷Queue是否是空(亦即Front=Rear),若是則 傳回True,否則傳回False。 方法:Is. Empty(Queue) 製作: Procedure Is. Empty (Queue) begin if (Front=Rear)

5. 判斷佇列是否是空的: 若使用陣列時,判斷Queue是否是空(亦即Front=Rear),若是則 傳回True,否則傳回False。 方法:Is. Empty(Queue) 製作: Procedure Is. Empty (Queue) begin if (Front=Rear) return True; // Queue為空 else return False; // Queue不為空 end 3/12/2021 20

 陣列的記憶體配置(空的Circular Queue) 3/12/2021 24

陣列的記憶體配置(空的Circular Queue) 3/12/2021 24

2. 將資料放入環形佇列(Add動作): 將資料(item)加入到Circular Queue中。 方法:Add(item, CQueue) 製作: Procedure Add(item, CQueue) begin Rear=(Rear+1) Mod N

2. 將資料放入環形佇列(Add動作): 將資料(item)加入到Circular Queue中。 方法:Add(item, CQueue) 製作: Procedure Add(item, CQueue) begin Rear=(Rear+1) Mod N if (Rear=Front) Circular Queue Is Full; //Circular Queue已滿 else { CQueue[Rear]=item; } end 3/12/2021 25

3/12/2021 27

3/12/2021 27

3/12/2021 28

3/12/2021 28

3/12/2021 29

3/12/2021 29

3. 刪除資料(Delete動作): 指刪除Circular Queue的元素。 方法:Delete(item, CQueue) 製作: Procedure Delete(item, CQueue) begin if (Front=Rear) Circular

3. 刪除資料(Delete動作): 指刪除Circular Queue的元素。 方法:Delete(item, CQueue) 製作: Procedure Delete(item, CQueue) begin if (Front=Rear) Circular Queue Is Empty; //Queue為空 else { Front=(Front+1) Mod N item=CQueue[Front]; } end 3/12/2021 30

2. 將資料加入環形佇列(Add動作): 將資料(item)加入到Circular Queue中。 方法:Add(item, CQueue) 製作: Procedure Add(item, CQueue) Begin Rear=(Rear+1) Mod n

2. 將資料加入環形佇列(Add動作): 將資料(item)加入到Circular Queue中。 方法:Add(item, CQueue) 製作: Procedure Add(item, CQueue) Begin Rear=(Rear+1) Mod n if (Rear=Front) And (Tag=1) Circular. Queue Is Full; //Queue已滿 else { CQueue[Rear]=item; if(Rear=Front) then Tag=1; } End 3/12/2021 36

3. 刪除資料(Delete動作): 指刪除Circular Queue的元素。 方法:Delete(item, CQueue) 製作: Procedure Delete(item, CQueue) begin if (Front=Rear) And

3. 刪除資料(Delete動作): 指刪除Circular Queue的元素。 方法:Delete(item, CQueue) 製作: Procedure Delete(item, CQueue) begin if (Front=Rear) And (Tag=0) Circular Queue Is Empty; //Queue為空 else { Front=(Front+1) Mod n item=CQueue[Front]; if(Rear=Front) then Tag=0; } end 3/12/2021 37