佇列(queue),是先進先出(fifo, first-in-first-out)的線性表。在具體應用中通常用鍊錶或者陣列來實現。佇列只允許在後端(稱為rear)進行插入操作,在前端(稱為front)進行刪除操作。
隊結構
迴圈佇列可以更簡單防止偽溢位(假溢位)的發生,但佇列大小是固定的。
防止假溢位,如d2犧牲乙個儲存來防止q.rear==q.front
迴圈鍊錶的實現
0.準備工作
#define ok 1
#define error 0
#define true 1
#define false 0
#define max_qsize 20 // 最大佇列長度+1
typedef int status;
typedef struct sqqueue;
構造乙個空佇列
// 構造乙個空佇列q
sqqueue * queueinit()
q->base = (int *)malloc(max_qsize * sizeof(int));
// 儲存分配失敗
if (!q->base)
q->front = q->rear = 0;
return q;
}
2. 判斷是否為空佇列
// 判斷是否為空佇列,若佇列q為空佇列,則返回1;否則返回-1
int queueempty(sqqueue q)
3.銷毀佇列
// 銷毀佇列q,q不再存在
void queuedestory(sqqueue *q)
4.清空佇列
//將q清為空佇列
void queueclear(sqqueue *q)
5.佇列的長度
// 返回q的元素個數,即佇列的長度
int queuelength(sqqueue *q)
6.列印佇列中的內容
// 列印佇列中的內容
status queueprint(sqqueue *q)
printf("n");
return ok;
}
7. 插入元素
// 插入元素e為q的新的隊尾元素
int queueput(sqqueue *q, int e)
8.彈出元素
// 彈出元素 若佇列不空,則刪除q的隊頭元素,用e返回其值,並返回1;否則返回-1
int queuepoll(sqqueue *q, int *e)
9.使用和列印
// 建立空佇列
printf("建立空佇列");
sqqueue *queue = queueinit();
// 新增元素
printf("新增元素 n");
for (int i = 0; i < 10; i ++)
// 列印佇列
printf("列印佇列 n");
queueprint(queue);
// 獲取佇列的長度
printf("獲取佇列的長度 %d n", queuelength(queue));
// 清空佇列
printf("清空佇列n");
queueclear(queue);
printf("獲取佇列的長度 %d n", queuelength(queue));
// 銷毀佇列
printf("銷毀佇列n");
queuedestory(queue);
列印結果如下
佇列(queue)原理
像棧一樣,佇列 queue 也是一種線性表,它的特性是先進先出,插入在一端,刪除在另一端。就像排隊一樣,剛來的人入隊 push 要排在隊尾 rear 每次出隊 pop 的都是隊首 front 的人。如圖1,描述了乙個佇列模型。佇列 queue 與棧一樣,是一種線性儲存結構,它具有如下特點 佇列中的資...
併發佇列Queue
乙個是以concurrentlinkedqueue為代表的高效能佇列,乙個是以blockingqueue為介面代表的阻塞佇列,都繼承自queue。concurrentlinkedqueue 是乙個適用高併發場景下的佇列,通過無鎖的方式,實現了高併發狀態下的高效能,通常concurrentlinged...
佇列 queue詳解
一.queue模版類的定義在標頭檔案中。queue與stack模版非常類似,queue模版也需要定義兩個模版引數,乙個是元素型別,乙個是容器型別,元素型別是必要的,容器型別是可選的,預設為dqueue型別。定義queue物件的示例 如下 queueq1 queueq2 queue的基本操作有 1.入...