堆疊與佇列
使用陣列建立佇列
#define MAXQUEUE 10 /* 佇列的最大容量
*/ int queue[MAXQUEUE]; /* 佇列的陣列宣告
*/ int front = -1; /* 佇列的前端
*/ int rear = -1; /* 佇列的尾端
*/ extern intisQueueEmpty();
externintdequeue();
使用陣列建立佇列-存入元素
函數enqueue()是將資料存入佇列的rear尾端,其步驟如下所示:
– Step 1:將尾端指標rear往前移動,也就是將指標 rear加1。
– Step 2:將值存入尾端指標rear所指的陣列元素。queue[++rear] = d;
使用陣列建立佇列-取出元素
函數dequeue()是從佇列的front前端取出資料,其步驟如下所示:
– Step 1:檢查佇列是否已空,如果沒有:
– Step 2:將前端指標front往前移,即把其值加1
– Step 3:取出前端指標front所指的陣列元素
return queue[++front];
使用陣列建立佇列-佇列是否已空
在取出資料5後,指標front(4)與佇列rear指標(5)相差1,表示目前尚有1個元素,front 指標是指向目前佇列中第1個元素的前一個元素。•換句話說,只需比較兩個front和rear指標是否相等,就可以知道佇列是否已空。•如果front指標是指向佇列中的第1個元素,當取出資料6後,front指標就已經和指標 rear相同,都是索引值5。
使用陣列建立佇列-問題
陣列實作的佇列有一個大問題,因為front和 rear變數的指標都是往同一個方向遞增,如果rear指標到達一維陣列的邊界 MAXQUEUE-1,就算佇列尚有一些空間,也需要位移佇列元素,才有空間存入其它佇列元素,如下圖所示: