資料結構迴圈佇列的自動擴充容量

2021-09-01 02:26:44 字數 1374 閱讀 3927

#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小的...