資料結構(寒假小結) 3 2佇列

2021-07-09 18:16:36 字數 3284 閱讀 5151

佇列:限定一端插入、另一端刪除的線性表。

空隊:佇列中沒有元素時

隊頭(front):允許刪除的一端

隊尾(rear) :允許插入的一端

ps:在佇列中依次加入元素a1,a2,…,an之後,a1是隊頭元素,an是隊尾元素。退出佇列的次序只能是a1,a2,…,an。

1)初始化initiate(q):構造乙個空佇列q。

2)判隊空empty(q):若佇列q空,返回1,否則返回0。

3)入隊enqueue(q, x):在隊尾插入元素x,x 成為新的隊尾

4)出隊dequeue (q):將隊頭元素刪除,並返 回該元素。

5)取隊頭gethead(q):取隊頭元素,但不 刪除它。

順序佇列:佇列的順序儲存結構。

1.用陣列來實現。

2. 隊頭、隊尾都變化,需要兩個指標分別指示隊頭和隊尾當前位置,front:隊頭指標,rear:隊尾指標。

3. 約定:隊頭指標指

向隊頭前一位置,尾指標指向隊尾。

1.當隊滿時再入隊必定產生空間溢位,簡稱「上溢」;上溢是一種出錯狀態,應該設法避免。

2.當隊空時再出隊也將產生溢位,簡稱「下溢」;下溢則可能是正常現象,因為佇列初態或終態都是空,下溢常作程式控制轉移的條件。

3.佇列並不滿,若尾指標已到陣列上界,再入隊也會溢位,稱為「假上溢」。

4.假溢位:當元素被插入到陣列中下標最大的位置上之後,佇列的空間就用盡了,儘管此時陣列的低端還有空閒空間,這種現象叫做假溢位。

5.出隊後原隊頭元素仍存在,但不作有效隊元素,可直接覆蓋

迴圈佇列:將儲存佇列的陣列頭尾相接;設想向量空間是乙個首尾相接的圓環,稱為迴圈向量,其中的佇列稱為迴圈佇列(circular queue)。

1.空隊時:front=rear;

2.入隊時尾指標向前追趕頭指標:

3.出隊時頭指標向前追趕尾指標,

4.隊滿時:front=rear。

如何判斷隊滿隊空?方法:

1)另設長度計數器n:入隊n++,出隊n--,當n為0時隊空,n為maxsize時隊滿。

2)另設標誌位flag以區分隊空、隊滿:若入隊後出現rear=front,則置flag=1,表明隊滿;其他情況flag=0.

3)空置一單元法:當迴圈響亮中只剩下1個元素空間,即已經存放maxsiza-1個元素時,就認為隊滿。

即隊滿條件為:

ront=(rear+1)%maxsize; 隊空條件為:

rear=front

此時少用乙個儲存單元,且front所指處總為空。

typedef int datatype; //佇列元素型別,假設為整型

const int maxsize=100; //佇列容量

typedef struct sqqueue;

//初始化

void init_sqqueue(sqqueue *sq)

//判空

int empty_sqqueue(sqqueue *sq)

//取佇列

int gethead_sqqueue(sqqueue *sq,datatype *x) else    //頭指標的下乙個位置才是隊頭

}//入隊

int en_sqqueue(sqqueue *sq,datatype x) //上溢

else

}//出隊

int de_sqqueue(sqqueue *sq,datatype *x)     //下溢

else

}

鏈佇列:佇列的鏈式儲存結構,運算受限的單鏈表。

1.尾插法,取鍊錶的頭部作隊頭,尾部作隊尾。

2.佇列沒有元素移動問題,鏈式儲存是為了動態利用儲存空間。

3.為運算方便,增加頭結點。

typedef struct node * pointer; //結點指標型別

struct node ;

typedef struct lkqueue;

//初始化

void init_lkqueue(lkqueue *lq)

//判空

int empty_lkqueue(lkqueue *lq)

//取隊頭

int gethead_lkqueue(lkqueue *lq,datatype *x)

else

}//入隊

void en_lkqueue(lkqueue *lq,datatype x)

//出隊

int de_lkqueue(lkqueue *lq,datatype *x)     //下溢

else

}//等效出隊:

int de_lkqueue2(lkqueue *lq,datatype *x)     //下溢

時間效能:

迴圈佇列和鏈佇列的基本操作都需要常數時間o (1)。

空間效能:

迴圈佇列:必須預先確定乙個固定的長度,所以有儲存元素個數的限制和空間浪費的問題。

鏈佇列:沒有佇列滿的問題,只有當記憶體沒有可用空間時才會出現佇列滿,但是每個元素都需要乙個指標域,從而產生了結構性開銷。

資料結構(C 3 2佇列

1.只允許在一端進行插入操作,在另一端進行刪除操作的線性表 2.隊尾 允許插入 入隊 進隊 的一端 3.隊頭 允許刪除 出隊 的一端 4.特性 先進先出 5.例子 銀行排隊 鍵盤緩衝區 作業系統的作業排程 1.設定隊頭 隊尾變數 rear front 2.入隊rear 1 出隊rear 1 3.約定...

資料結構5 佇列

5.1簡介 佇列 queue 和堆疊一樣是一種有序鍊錶,屬於抽象資料型別。不同在於是先進先出 first in,first out,fifo 堆疊只需要乙個top指標指向堆疊頂端即可,但是佇列必須使用front和rear兩個指標分別指向佇列的前端和尾端。基本操作 1 create 建立空佇列 2 a...

資料結構(二) 佇列

一 佇列定義 佇列是限定在一端進行插入,另一端進行刪除特殊線性表。二 佇列基本操作 入隊出隊 三 佇列例題 1.例1 舞伴配對問題 分析 這一題是一道經典的取模運算,每一次將編號往前加一位,到達n就取模。include include include include int main return ...