#define true 1
#define false 0
#define ok 1
#define error 0
typedef int qelemtype;
typedef int status;
1.初始化佇列
status initqueue(sqqueue * q)
2.入隊操作
當rear的標號大於font的標號時,這時候擴容是非常簡單的,直接使font+1即可
但是由於是迴圈佇列,所以會出現rear的標號小於font的標號,此時如果直接將rear的標號+1,那麼rear==font 這時候就會出現問題,
那麼如何解決rear小於font這種情況呢
基本想法是這樣的:將佇列中的元素放到乙個新的陣列中,然後將陣列的元素賦值給佇列的頭指標指向的陣列,然後再將插入的元素放到這個佇列中,這樣佇列就被重置為font大於rear的情況了,對於黑盒外的使用者而言只需要看到佇列的特點(放入元素在隊尾,刪除元素在對頭)即可。
**如下:
status enqueue(sqqueue * q, qelemtype e)
// put the value of the array to the queue q
for (int k = 0; k < (q->queue_size-1-increment_size); k++)
// put the new elem to the queue
q->base[q->queue_size-1-increment_size] = e;
q->font = 0;
q->rear = q->queue_size-1;
return ok;}}
q->base[q->rear] = e;
q->rear = (q->rear+1) % q->queue_size;
return ok;
}
3.出隊操作
status dequeue(sqqueue * q, qelemtype * e)
// if the queue is empty return true else return false
status queueempty(sqqueue * q)
4.列印佇列
status printqueue(sqqueue * q)
return status;
}
資料結構 佇列 迴圈佇列
在佇列的陣列實現中,我們很容易發現數在出隊後,陣列的前面部分會有剩餘空間沒有被使用,所以我們為了最大程度的利用固定長度的陣列,我們採用迴圈佇列的儲存方式,這種方式的最大問題在於resize的時候比較麻煩,所以我們不考慮resize的情況。基本結構如下,這裡front指向第乙個元素的位置,rear指向...
資料結構 佇列 迴圈佇列
資料結構 佇列 迴圈佇列 順序儲存 犧牲乙個空間單元來判段佇列滿狀態。q.front q.rear 1 initsize date 2017 4 16 include define elemtype char define initsize 100 typedef structsqqueue voi...
擴充的資料結構
程式設計中常常會遇到已有的資料結構無法解決問題,這時不要急著建立新的資料結構,可以在已有資料結構的基礎上新增新的字段。本節在紅黑樹這一基礎資料結構上進行擴充套件,得出兩個重要的應用 動態順序統計和區間樹。一種支援一般動態集合上順序統計操作的資料結構。通過這種資料結構,可以快速找到乙個集合中的第i小的...