資料結構 順序迴圈佇列及其實現(C語言)

2021-09-03 07:34:03 字數 1243 閱讀 3478

給定乙個大小為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 順序佇列是用順序表實現的 即依託於陣列 這裡實現的是迴圈佇列,其實也可以不用迴圈,但是那樣的話,空間的利用效率就太低了,這就是 假溢位 問題,因為在陣列的前端可能還有空閒的位置 因為佇列中的資料是在動態變化的,可能出隊也可能入對 為了能夠充分利空間,所以用迴圈佇列,即在邏輯上把陣...