queue的長度 佇列 Queue

2021-10-11 19:59:24 字數 2273 閱讀 4247

佇列(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.入...