第12天 對佇列中迴圈佇列的學習

2021-10-18 13:20:08 字數 2632 閱讀 6901

對重點的標註都在**中,其中最為重要的內容為:

1.入隊和出隊的操作:(q->front+1)%maxsize

(q->rear+1)%maxsize

2.判滿和判空:

隊滿:

隊空從邏輯上表示兩者均是front= rear;所以為了區別兩者我們需要隊滿的條件設定為:(q->rear+1)%maxsize==q->front

3.隊中 元素個數:(q->rear-q->front+maxsize)%maxsize

注:看圖我們統一方向為:逆時針方向

對於圖一來說:q->front  在 q->rear後面-------------為正常情況

所以 length=q->rear-q-front  (元素個數=尾數減頭+1;但是q->front表示的是對頭元素前乙個位置~=自動-1)

對於圖二來說:q->font 在 q->rear 前面---------------為特殊情況

所以此時 :q->front=q.front+maxsize

所以 原始表示式子中 length=q->rear-q-front=q.front+maxsize-q->rear

綜上所述:為了統一我們兩式合併為length=q->rear-q-front=(q->rear-q.front+maxsize)%maxsize;

**如下:

#define maxsize 50

#define elemtype int

#include#include#include//迴圈佇列結點說明

typedef struct sq_queue sqqueue;

//初始化

void initqueue(sqqueue*& q);

//銷毀

void destroyqueue(sqqueue*& q);

//判空

bool queueempty(sqqueue* q);

//進隊

bool enqueue(sqqueue*& q, elemtype e);

//出隊

bool edqueue(sqqueue*& q, elemtype& e);

//隊長度

bool queuelength(sqqueue* q, int& a);

void initqueue(sqqueue*& q)

void destroyqueue(sqqueue*& q)

bool queueempty(sqqueue* q)

bool enqueue(sqqueue*& q, elemtype e)

q->rear = (q->rear + 1) % maxsize;

/* 當佇列中a[maxisze-1]處插完之後,a[0]處為空的話 可以從0開始再插,完美利用空間

*/q->date[q->rear] = e;

return true;

}bool edqueue(sqqueue*& q, elemtype& e)

q->front = (q->front + 1) % maxsize;

/* 當佇列中a[maxisze-1]處插完之後,a[0]處為空的話 可以從0開始再插,完美利用空間

*/e = q->date[q->front];

return true;

}bool queuelength(sqqueue* q, int& a)

a = (q->rear - q->front + maxsize) % maxsize;

/* 正常狀態下 :尾-初

當尾《初時:括號中值為負%操作下是乙個錯誤答案

eg:乙個長度為10的佇列但是有效位置只有8-5則這個佇列的長度為:7

(5-8)=-3%10=-3顯然是錯誤的

(5-8+10)=7%10=7正解

*/return true;

}int main() ;

initqueue(q);

queueempty(q);

int s;

for (s = 0; s <= 3; ++s)

elemtype w;

//edqueue(q, w);

//printf("%d", w);

int i;

queuelength(q, i);

printf("\n%d", i);

return 0;

}

我對JS佇列的學習

佇列是遵循fifo 先進先出 原則的一組有序的項。佇列在尾部新增新元素,並從頂部移除元素。最新新增的元素必須排在佇列的末尾。在具體應用中通常用鍊錶或者陣列來實現。佇列的操作其實是和棧是差不多的,但是佇列只允許新資料在後端進行新增。1 建立佇列 宣告乙個類 function queue 需要乙個用於儲...

資料結構 迴圈佇列的學習

迴圈佇列需要隊首和隊尾兩個標誌位 其中 front 標誌位 位於 隊頭前乙個位置 rear 指向最後乙個元素位置 當 front rear 此時佇列空 當 rear 1 maxsize front 時此時佇列滿 這是犧牲了乙個單元空間的效果 避免假溢位 include using namespace...

對Quene中的佇列的狀態進行操作

檢視佇列的狀態 包括佇列的滿狀態 空 元素個數等等 1 import multiprocessing 23 quene multiprocessing.queue 3 4 quene.put 12 5 quene.put hello 6 quene.put world 78 1.判斷佇列是否是滿狀態...