靜態陣列實現迴圈佇列不需要考慮空間的釋放。迴圈佇列的實現主要重點是在兩個指標的比較上。
#include
#define maxsize 10
#define elemtype int
#define status int
#define ok 1
#define error 0
typedef
struct
queue;
void initqueue (queue *q)
;//初始化佇列
status enqueue (queue *q, elemtype e)
;//元素入隊
status dequeue (queue *q, elemtype *x)
;//元素出隊
status gettop (queue *q, elemtype *x)
;//獲取隊首元素
int emptyqueue (queue *q)
;//判斷佇列是否為空
int fullqueue (queue *q)
;//判斷佇列是否為滿
void clearqueue (queue *q)
;//清空佇列
int queuelen (queue *q)
;//獲取佇列長度(元素個數)
void display (queue *q)
;//列印佇列元素
int main (
void
) printf (
"當前佇列的隊首元素為:\n");
gettop (
&q,&x)
; printf (
"%d\n"
, x)
; printf (
"請輸入出隊元素個數:\n");
scanf (
"%d"
,&t)
;for
(i =
0; i < t; i++
) printf (
"當前佇列元素為:\n");
display (
&q);
return0;
}void initqueue (queue *q)
status enqueue (queue *q, elemtype e)
q->data[q->rear]
= e;
q->rear =
(q->rear +1)
% maxsize;
//!!
return ok;
}status dequeue (queue *q, elemtype *x)
*x = q->data[q->front]
; q->front++
;return ok;
}status gettop (queue *q, elemtype *x)
*x = q->data[q->front]
;return ok;
}int emptyqueue (queue *q)
int fullqueue (queue *q)
void clearqueue (queue *q)
//!!
int queuelen (queue *q)
//!!
void display (queue *q)
}
1.元素入棧時 隊尾指標的移動rear = (rear + 1) % maxsize
,這一步完成的是隊尾指標從陣列的高位到低位的跨越,即把隊尾和隊首相連
2.獲取佇列長度時len = (rear - front + maxsize) % maxsize
,+maxsize解決的是在邏輯位置上上,當rear < front 的情況,比如rear指向陣列下標為0的位置,而front指向陣列下標為3的位置。
3.for (i = 0; i < n; i++)
,這一步q->data[ (q->front + i) % maxsize]
絕了,沒有移動front完成了對佇列的遍歷。
定義列印函式時,如果形參傳入的是指標,也就意味著列印函式內部的操作會產生不可逆的影響,因此對函式的定義要謹慎,不要輕易移動rear或front這類的指標,會對後續操作產生影響。比如說,移動front把佇列元素列印完畢,此時front不再指向隊首元素,而是隊尾元素,後續如果再有元素要入隊,哦豁,完蛋。
另一種方式是將形參變為傳入元素,如queue q,這樣傳入的是副本,移動完front列印佇列元素之後,不會影響到主函式中佇列的front值。
如有錯誤或者表述不當之處,還請多多指教~
資料結構 佇列 迴圈佇列 陣列實現
佇列是一種特殊的 線性表,特殊之處在於它只允許在表的前端 front 進行刪除操作,而在表的後端 tail 進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。以陣列實現的佇列結構,如果是普通佇列,頻繁增刪元素,會造成陣列記憶體空間的大量流失,所...
資料結構 陣列佇列 迴圈佇列
佇列 是 先進先出 的資料結構,從隊尾入隊,從隊頭出隊。佇列中使用的array,參考 資料結構 手寫動態陣列 public inte ce queue public class arrayqueue implements queue public arrayqueue int capacity ov...
資料結構 佇列,陣列實現 鍊錶實現和迴圈佇列
一 什麼是佇列 一種先進先出的資料結構 fifo結構 新元素新增在隊尾 push 刪除操作刪掉第乙個元素 pop 二 佇列的實現方式 佇列的實現方式陣列實現 鍊錶實現 三 常見的佇列 常用佇列迴圈佇列 阻塞佇列 併發佇列 四 怎麼實現乙個無bug的佇列思考 思考1 head 頭元素 和tail 尾元...