佇列(queue)是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。
是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端稱為隊尾,允許刪除的一端稱為隊頭。
迴圈佇列是把佇列頭尾相接的順序儲存結構。
通用計算佇列長度的公式:
(rear - front + max_size) % queuesize
佇列滿的條件為:
(rear + 1) % queuesize == front
typedef int qelemtype;
typedef struct sqqueue;
status initqueue(sqqueue* q)
int queuelength(sqqueue q)
status enqueue(sqqueue* q, qelemtype e)
q->data[q->rear] = e; //將元素e賦值到隊尾
q->rear = (q->rear + 1) % max_size; //rear指標向後移動乙個位置,若到最後則轉到陣列頭部
return ok;
}
status dequeue(sqqueue *q, qelemtype *e)
*e = q->data[q->front]; //將隊頭元素賦值給e
q->front = (q->front + 1) % max_size; //front指標向後移動乙個位置,若到最後則轉至陣列頭部
return ok;
}
迴圈佇列存在著陣列溢位的風險。
佇列的鏈式儲存結構,其實就是線性表的單鏈表。也被稱為鏈佇列。
//結點結構
typedef struct qnode
qnode, *queueptr;
//佇列的鍊錶結構
typedef struct
linkqueue;
status enqueue(linkqueue *q, qelemtype e)
status dequeue(linkqueue *q, qelemtype *e)
p = q->front->next; //將欲刪除的隊頭結點存於p
*e = p->data; //將欲刪除的隊頭結點的值賦值給e
q->front->next = p->next; //將原隊頭結點後繼p->next賦值給頭結點後繼
if (q->rear == p) //若隊頭是隊尾,則刪除後將rear指向頭結點
q->rear = q->front;
free(p);
return ok;
}
資料結構 佇列總結
一.何為佇列?在資料結構中,在有序列表中資料的輸入輸出分別是由不同埠處理的,輸出端稱為前端,輸入端稱為後端,這樣會使得先進入的資料先被取出,即它具有先進先出的特性。二.佇列都分為那幾類?我們最常見的佇列有 順序佇列,迴圈佇列,鏈佇列以及雙向佇列 不過,我們除了必須掌握這幾種常見佇列也要對不常見的佇列...
資料結構 佇列總結
用順序和鏈式實現了線性表,這次要用順序和鏈式實現佇列了。佇列 只允許在一端進行插入操作,而另一端進行刪除操作的線性表。允許插入 入隊 進隊 的一端稱為隊尾,允許刪除 出隊 的一端稱為隊頭。佇列的操作特性 先進先出 順序佇列 佇列的順序儲存結構 假溢位 當元素被插入到陣列中下標最大的位置上之後,佇列的...
資料結構之佇列and棧總結分析
一 前言 資料結構中佇列和棧也是常見的兩個資料結構,佇列和棧在實際使用場景上也是相輔相成的,下面簡單總結一下,如有不對之處,多多指點交流,謝謝。二 佇列簡介 佇列顧名思義就是排隊的意思,根據我們的實際生活不難理解,排隊就是有先後順序,先到先得,其實在程式資料結構中的佇列其效果也是一樣,及先進先出。1...