《資料結構打卡》第16天 佇列篇

2021-10-06 04:57:56 字數 2541 閱讀 3763

距離上一次更新隔了也有15天之久了,在家裡的這段時間真的過得蠻快的,但是也是昨天跟今天一樣,今天跟明天一樣,迴圈往復著;

佇列的定義:

佇列是操作受限的線性表,佇列的插入在隊尾,佇列的刪除在隊頭,

佇列是先進先出的線性表

1、什麼是佇列的上溢現象?一般有幾種解決方法,試簡述之?

答:…當佇列中還有剩餘空間,入隊時卻出現隊滿的情況,一般是因為隊滿條件設定不合理造成的,稱之為「假溢位」。

總共有三種方法解決佇列的假溢位:

方法一:增設乙個儲存佇列元素個數的變數num,當num=0時隊空,當num=maxqsize 時為隊滿;

方法二:設定乙個flag標誌,當front =rear且flag =0時,則隊空,當front=rear且flag = 1時,則隊滿。

方法三:採取少用乙個儲存單元的方式,引入迴圈佇列,則隊滿時佇列中還剩乙個空閒單元,即隊空條件:front == rear,隊滿條件:(rear+1) % maxqsize == front,佇列長度為(rear-front+maxqsize) % maxqsize。

順序佇列抽象資料型別定義:

typedef

struct

//sqqueue 順序隊的型別

1.順序佇列的要素

隊空條件:q.front == q.rear

隊滿條件:q.front == maxqsize -1(陣列的最大下標)

隊滿條件:也可以是q->rear==q->front= =n

其實和棧的棧空棧滿條件很相似,

棧空是s.top == -1;

棧滿是s.top == maxsize -1;

順序隊的初始化

void

initqueue

(sqqueue &q)

順序隊的入隊enqueue(&q,e):

void

enqueue

(sqqueue &q,qelemtype e)

順序隊的出隊dequeue(&q,&e):

void

dequeue

(sqqueue &q,qelmetype &e)

銷毀佇列,判斷隊空。

void

destroyqueue

(sqqueue &q)

bool

queueempty

(sqqueue &q)

2.迴圈佇列的三要素

隊空條件:q.front == q.rear

隊滿條件:(q.rear+1) % maxqsize == q.front

佇列長度:(q.rear-q.front+maxqsize) % maxqsize

入隊 rear指標迴圈增1:q.rear = (q.rear+1) % maxqsize

出隊 front指標迴圈增1:q.front = (q.front+1) % maxqsize

//一般情況下,迴圈佇列採用隊頭front指向當前第乙個元素的位置,rear指向最後乙個元素的下乙個位置。

迴圈佇列的初始化

void

initqueue

(sqqueue &q)

迴圈佇列的入隊、出隊、求佇列長度:

這裡入隊和出隊統一按照先移動隊頭或隊尾指標,然後再入隊或出隊元素

status enqueue

(sqqueue &q,qelemtype q)

status dequeue

(sqqueue &q,qelemtype &q)

intlengthqueue

(sqqueue &q)

3.鏈式佇列的要素

隊空的條件為:q.rear->next == null

和鏈式棧一樣,不考慮隊滿的情況

鏈式佇列的入隊:

①生成新結點存放元素e,由p指標指向。

②將結點p從隊尾插入,再由隊尾指標指向它。

status enqueue

(linkqueue &q,qelmetype e)

return ok;

}

status dequeue

(linkqueue &q,elemtype &e)

《資料結構打卡》第10天 排序篇

各種排序的說明 各種排序比較次數 插入 排序 最少n 1 最多n n 1 2 冒泡 排序 最少n 1 最多n n 1 2 選擇 排序 最少最多為n n 1 2 快速 排序 最少nlog2n 最多n2 歸併 排序 nlog2n 2n 1 logn 一 例如 關鍵字 45 80 48 40 22 78 ...

《資料結構打卡》第8天 自定義演算法篇

0 編寫乙個演算法,要求將奇數最先輸出,偶數最後輸出 15分 使用棧來操作。演算法思想 1.假設陣列arr中的值為,分別用兩個棧來輸出 2.奇數棧用於儲存,偶數棧用於儲存 3.最後用元素e分別從兩個棧中取出元素奇數元素在前,偶數元素在後的乙個序列,輸出為 void fun elemtype arr,...

資料結構(佇列實現篇)

在資料結構與演算法中,佇列queue是一種受限的線性儲存結構,特殊之處在於它只允許在表的前端front進行刪除操作,而在表的後端rear進行插入操作,和棧一樣,佇列是一種操作受限制的線性表。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。遵循先進先出fifo的規則。佇列結構示意圖 佇列結構使用 ...