迴圈佇列的簡單知識

2021-06-28 23:41:52 字數 1629 閱讀 5014

佇列其實也是鍊錶,這裡講的是順序表示。佇列,顧名思義,就是排隊的隊形。按照專業一點就是fifo(first in first out) 原則,從對列頭出列,從對尾入列。

因為迴圈佇列最利用效率,也稍微增加了難度,所以要記住迴圈佇列的表示方法。

其實很多資料結構都有很多種寫法,重要是理解其思想,**完成只是讓自己更加透徹的掌握,每一種實現方式都是按其思想一步一步完成的。

先貼出結構體:

typedef struct queue queue;

如果不同的資料型別 int *base 的型別記得換,還有好多地方 ,記得就行了。

之所以用迴圈佇列,是因為對頭只能出,對尾只能入,這樣就變成了上面的位置空出後就一直空著了,造成了很大的浪費啊。

我之前學的時候迴圈佇列的時候就覺得很暈,主要是當時我的確太渣了,現在理解了其中的道理,感覺還是挺好玩的。迴圈的意思並沒有違背對頭對尾的概念,就像我在乙個圓圈上開了倆個洞,乙個標為頭,乙個標為尾,所以不管轉或不轉,我的標誌就在那兒。

我們這樣想,假如這個迴圈的圈圈,有6個位置,但是我們只裝5個數(**有注釋),

e→ d →c →b→ a    頭

下標是 4 3 2 1 0等到裝滿的時候便不能裝了,然後出對是不,那麼這時候a下標為0從頭出去了,那麼對頭就變成

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

成為了1,然後有數f來入隊,那麼此時對尾變成了

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

成為了0,看到了沒,就因為簡單的取餘的操作,我的下標永遠在0-4間迴圈,就成為了迴圈佇列。

好了,也許和我當初學的時候想的不一樣,以後還是覺得把剛學的知識,馬上寫出感受才好,新鮮又貼近最真實的感覺。

#include #include #include typedef struct queue queue;

void initqueue(queue *q, int size)

q->front = 0;

q->rear = 0;//初始化佇列裡沒有元素 下標為0

}void destroyqueue(queue *q)

void clearqueue(queue *q)

bool isempty(queue *q) else

return false;

}bool isfull(queue *q)

else

return false;

}bool gethead(queue *q, int *e) else

}int length(queue *q)

//出對入隊只要記著隊尾入隊,對頭出對即可。

bool enqueue(queue *q, int item)

else

return true;

}bool dequeue(queue *q, int *item)

return true;

}//測試程式

int main()

destroyqueue(&q);//佇列已經銷毀 任何操作都沒用了

//enqueue(&q,1);

gethead(&q,&a);

return 0;

}

簡單的python迴圈知識

我們在寫 時經常會用到迴圈,python中有for迴圈和while迴圈,我們來詳細的了解一下這兩種迴圈。python for迴圈可以遍歷任何序列的專案,如乙個列表或者乙個字串。我們通過乙個例子來看一下for迴圈的具體使用,我們通過range 函式建立乙個整數列表,然後將列表中的元素通過for迴圈列印...

迴圈佇列與鏈佇列的簡單實現

為充分利用向量空間,克服 假溢位 現象的方法是 將向量空間想象為乙個首尾相接的圓環,並稱這種向量為迴圈向量。儲存在其中的佇列稱為迴圈佇列 circular queue 通過上圖可以看出,如果使用順序表作為佇列的話,當處於d狀態則不能繼續插入新的隊尾元素,否則會因為陣列越界而導致程式 被破壞。當隊列為...

c 棧,佇列,迴圈佇列 簡單實現

棧 include using namespace std template struct node template class stack bool push const t e const t pop const t gtop bool empty int size bool clear pr...