• 沒有找到結果。

以陣列製作環狀佇列

N/A
N/A
Protected

Academic year: 2021

Share "以陣列製作環狀佇列"

Copied!
13
0
0

加載中.... (立即查看全文)

全文

(1)

以陣列製作

(2)

以陣列製作環狀佇列

(CIRCULAR QUEUE)

假設放入佇列的資料為整數,且佇列最大容量是100,

則陣列可以宣告如下:

#define N 100 /* 佇列大小 */

int queue [N]; /* 陣列queue當作佇列 */

0 1 2 3 N - 1

(3)

於環狀佇列中

加入資料

當尾端為 N-1 時,而位置0 處空著時, 將資料加入 queue[0] 處。 1 2 3 0 N - 1 前端 0 1 2 3 N-2 …… N-1 前端 …… d d 尾端 尾端

(4)

於環狀佇列中

刪除資料

0 1 2 3 ………… N -1 3 0 1 N -rear 前端 4 前端 尾端 4 1 2 0 1 2 3 …… N -1 3 0 1 N -rear 前端 前端 尾端 4 1 2 ……

(5)

陣列製作佇列要點

佇列視為一個環,即環狀佇列。

需紀錄

前端的前一個位置

,例如使用

front

表示。

需紀錄

尾端的位置

,例如使用

rear

表示。

僅剩最後一個空間時

視為環狀佇列已滿

,不

能再加入資料。

(6)

環狀佇列何時已

滿

d 0 1 2 3 …… N-1 …… 1 2 3 0 2 N -1 N -rear front rear front 0 1 2 3 …… N-1 …… 1 2 3 0 2 N -1 N -rear front rearfront 加入 d d

(7)

環狀佇列何時已

0 1 2 3 …… 1 N -…… 3 0 1 N -rear front 4 front rear 4 1 2 0 1 2 3 …… N - 1 …… 3 0 1 N -rear front 4 front rear 4 1 2 刪除

(8)

陣列製作環狀佇列的問題

環狀佇列滿時

(front == rear) 成立

不能再加入資料

環狀佇列空時

(front == rear) 成立

不能刪除資料

當(front == rear) 成立時,佇列是滿的還是空的?

(9)

下列為兩種環狀佇列視為已滿的情形。 此時 (rear+1)%N == front 成立 1 2 3 0 N- 1 rear front 1 2 3 0 N- 1 rear front

(10)

陣列製作環狀佇列

環狀佇列已滿

( (rear+1) % N == front

) 成立

環狀佇列已空

(11)

使用陣列製作環狀佇列

#define N 100 int queue[N];

int front = N-1, rear = N-1;

1 2 3 0 2 N -1 N -rear front 0 1 2 3 N - 2 …… N - 1 rear front ……

(12)

加入資料(ADD TO A CIRCULAR QUEUE)

void add(int d) {

if ( front == (rear+1)%N ){

printf(“circular queue is full.\n”); exit(1); } rear = (rear+1)%N; queue[rear] = d; } 檢查環狀佇列是否滿了 否則rear向後移一格, 新資料加入rear位置內。

(13)

刪除資料

(DELETE FROM A CIRCULAR QUEUE)

int delete ( ) {

if ( front == rear ) {

printf (“Circular queue is empty.\n”); exit(1); } front = (front+1)%N; return queue[front]; } front變數表示真正前端元素的前一個位置 檢查環狀佇列是否空了 front向後移一格, 取出front位置之資料

參考文獻

相關文件

For periodic sequence (with period n) that has exactly one of each 1 ∼ n in any group, we can find the least upper bound of the number of converged-routes... Elementary number

sort 函式可將一組資料排序成遞增 (ascending order) 或 遞減順序 (descending order)。. 如果這組資料是一個行或列向量,整組資料會進行排序。

●報名資料填寫完畢後,於首頁可點選欲列印之報名表,即可進入列印檢視頁面,請利用瀏覽器列

所以 10 個數字 個數字 個數字 個數字 pattern 就產生 就產生 就產生 就產生 10 列資料 列資料 列資料 列資料 ( 每一橫 每一橫 每一橫

[r]

路旁上落客貨活動頻繁,經常有車輛駛經並需要在路旁短暫停留。就以九龍 上海街為例,該路段共有 7 個巴士站,有 11 條巴士線,每日有 690

ðWinner winner, chicken

[r]