前面在學習順序佇列時,我們知道順序佇列是採用陣列的方式來儲存資料的, 但是可能會出現儲存空間不足的問題,同時還可能造成「佇列已滿」的假象。但是在迴圈佇列中就不會出現這種問題。
迴圈佇列的策略:充分地使用陣列中的儲存空間,把陣列的前端和後端連線起來(相當於把佇列的隊首和隊尾連線起來),形成乙個環形的順序表。從邏輯結構來看這是乙個環形佇列或迴圈佇列,但是從資料儲存的物理結構來看還是和原來的陣列方式是一樣的
。
迴圈佇列的儲存結構:
typedef
struct
sqqueue;
迴圈佇列的四要素:
1.隊列為空的條件為front = rear
2.隊滿的條件為(rear+1) % maxsize = front,在這種情況下,rear和front正好指向下標0的位置,說明佇列已滿,但是這樣的話就只能儲存maxsize - 1個資料元素了,下標0的位置不儲存資料元素
3.進隊的操作:rear = (rear+1)%maxsize,將元素e放在rear的位置
4.出隊的操作:front = ( front + 1) % maxsize,取出front位置的元素e
1.初始化佇列initqueue(q)
建立乙個空佇列q,將front和rear指標都初始化為0
2.銷毀佇列clearqueue(&q)
釋放佇列q占用的儲存空間
void destroyqueue(sqqueue *&q)
3.判斷佇列是否為空queueempty(q)
隊列為空的條件:q->front==q->rear
4.進佇列enqueue(q,e)
在進行入隊操作時,先判斷佇列是否已滿,在佇列不滿的條件下,先將隊尾指標rear + 1,然後將元素新增到該位置。如果(q->rear+1)%maxsize==q->front的話,則說明rear+1後位置就會和front重疊,此時佇列的空間是滿的,不能加入新的元素。
5.出佇列dequeue(q,e)
在進行出隊操作時,也需要先判斷佇列是否為空,在佇列q不為空的條件下,將隊首front + 1,此時front指向元素a的位置,然後將元素a出隊,再將front + 1,將元素b出隊。
迴圈佇列基本操作
include include include include define ok 1 define error 0 define maxsize 4 分配的最大空間 typedef struct que queuelink int initloopqueue queuelink 初始化迴圈佇列 i...
迴圈佇列的基本操作
一 迴圈佇列的基本概念。佇列是線性表的一種,相對於棧的先進後出 filo 佇列是先進先出的 fifo 因此只能在一端輸入 隊尾rear 在另一端輸出 隊頭front 順序佇列的隊頭指向當前佇列第乙個元素的位置,隊尾指向當前元素的下乙個位置的下乙個位置,但是當隊滿時不能入棧,存在問題 設陣列長度為m,...
迴圈佇列的基本操作實現
front 指向隊頭元素的前乙個單元 rear 指向隊尾元素 maxsize 陣列的最大長度 元素入隊的時候,將隊尾的指標加1,然後元素入隊 元素出隊時,先將對頭指標加1,然後元素出隊。隊頭指標進1 front front 1 maxsize 隊尾指標進1 rear rear 1 maxsize 在...