給定乙個大小為maxsize的陣列儲存乙個佇列,經過若干次的插入和刪除以後,當隊尾指標 rear = maxsize 時,呈現佇列滿的狀態,而事實上陣列的前部可能還有空閒的位置。為了有效地利用空間,引入迴圈佇列(環狀)。
在迴圈佇列中,如果佇列中最後乙個結點存放在陣列的最後乙個元素位置,而陣列前面有空位置的話,則下次在進行插入操作時,將插入到陣列最前面那個元素的位置。其他情況下的插入操作和一般的佇列的插入操作一樣。
如果再插入乙個新的結點,則陣列空間將全部被占用,佇列已滿,且rear == front。
若刪除乙個結點,佇列成為空佇列,也有 rear == front。
如何區別?
方法一:
設定乙個標誌。由於rear+1使rear==front -> 滿佇列
由於 front +1 使rear == front -> 空佇列
方法二:
犧牲乙個陣列元素的空間,即若陣列大小為maxsize,該陣列所表示的迴圈佇列最多允許儲存maxsize-1個結點。
迴圈佇列滿的條件:(rear+1)%maxsize == front
迴圈佇列空的條件: rear == front
#include #include const int maxsize = 5;
typedef struct
sequence_queue;
void init(sequence_queue *sq)
void insert(sequence_queue *sq,int x)
sq->a[sq->rear]=x;
sq->rear=(sq->rear+1)%maxsize;
printf("front = %d\n",sq->front);
printf("rear = %d\n",sq->rear);
}void del(sequence_queue *sq)
sq->front=(sq->front+1)%maxsize;
printf("front = %d\n",sq->front);
printf("rear = %d\n",sq->rear);
}void display(sequence_queue sq)
while(i!=sq.rear)
printf("\n");
}int main ()
case 2:
default:
}} return 0;
}
資料結構 佇列實現(順序迴圈佇列 鏈式佇列)
佇列的介面 public inte ce qqueue 存在假溢位問題!不建議使用 使用模擬迴圈的方式避免假溢位 實現 package pers.zhang.queue author zhang date 2020 1 17 11 45 順序迴圈佇列 public class seqqueue im...
資料結構 迴圈佇列的順序實現
首先來看看什麼是佇列?佇列是只允許在一端進行插入資料操作,在另一端進行刪除資料操作 的特殊線性表。通常情況下插入資料那一端叫做隊尾,刪除的那一端叫做對頭,佇列具有先進先出的特點。佇列一共有兩種線性儲存方式,一種是順序的一種是鏈式的,順序佇列如圖所示 如果再加入兩個元素就會出現假溢位現象。實際上還剩餘...
資料結構 迴圈佇列(順序佇列)模板類實現
資料結構筆記3.3 順序佇列是用順序表實現的 即依託於陣列 這裡實現的是迴圈佇列,其實也可以不用迴圈,但是那樣的話,空間的利用效率就太低了,這就是 假溢位 問題,因為在陣列的前端可能還有空閒的位置 因為佇列中的資料是在動態變化的,可能出隊也可能入對 為了能夠充分利空間,所以用迴圈佇列,即在邏輯上把陣...