資料結構 靜態陣列實現迴圈佇列

2021-10-10 17:44:31 字數 2355 閱讀 3194

靜態陣列實現迴圈佇列不需要考慮空間的釋放。迴圈佇列的實現主要重點是在兩個指標的比較上。

#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 尾元...