大話資料結構筆記4 2佇列

2021-10-05 13:43:09 字數 3012 閱讀 7396

佇列是只允許在一端進行插入操作,另一端進行刪除操作的線性表,

佇列是一種先進先出(first in first out)的線性表,簡稱fifo。允許插入的一端為隊尾,允許刪除的一端稱為隊頭。

####抽象資料型別

對於長度為n的佇列, 順序儲存則需要建立 大於n的陣列,佇列元素儲存在陣列前n個元素

此時 入隊操作既是在陣列末尾新增元素,時間複雜度o(1)

出隊操作時,a1 出佇列 ,則後續元素需要前移,時間複雜度o(n)

如果不限制佇列的元素必須儲存在陣列的前n個單元,出隊效能大大增加

解決方法

引入兩個指標,front指標指向隊頭元素,rear指標指向隊尾元素的下乙個位置,

front=rear時,則是空佇列

依舊存在的問題,陣列越界了,前邊的空位還有,這種現象稱作假溢位。如圖入隊a6越界

於是引出了迴圈佇列

為了解決假溢位現象,後邊滿了則從頭開始, 也就是頭尾相銜的迴圈。我們把這種頭尾相接的順序儲存結構成為迴圈佇列。

新的問題

前邊提到空佇列時候,front= rear,然而如圖 當插入a7時候 front=a7

方法2的討論

若佇列的最大尺寸是 queuesize,

/**

* 順序儲存 迴圈佇列

*/#include

"stdio.h"

typedef

int qeletype;

//棧元素型別 此處定義為int

#define maxsize 6

#define ok 1

#define error 0

#define true 1

#define false 0

typedef

int status;

typedef

struct

sqqueue;

//初始化佇列

status initqueue

(sqqueue *q)

//返回佇列長度

intqueuelength

(sqqueue q)

//入佇列

status enqueue

(sqqueue *q, qeletype e)

printf

("來入佇列了===%d\n"

,e);

q->data[q->rear]

= e;

q->rear =

(q->rear+1)

%maxsize;

return ok;

}//出佇列

status dequeue

(sqqueue *q, qeletype *e)

*e = q->data[q->front]

; q->front =

(q->front+1)

%maxsize;

return ok;

}int

main()

/**

* 鏈式儲存 迴圈佇列

*/#include

"stdio.h"

typedef

int qeletype;

//棧元素型別 此處定義為int

#define maxsize 6

#define ok 1

#define error 0

#define true 1

#define false 0

#define null 0

typedef

int status;

//節點結構

typedef

struct qnode

qnode,

*queueptr;

//佇列的鍊錶結構

typedef

struct

linkqueue;

//返回佇列長度

intqueuelength

(linkqueue q)

//入佇列

status enqueue

(linkqueue *q, qeletype e)

s->data = e;

s->next =

null

; q->rear->next = s;

q->rear = s;

return ok;

}//出佇列

status dequeue

(linkqueue *q, qeletype *e)

p = q->front->next;

*e = p->data;

q->front->next = p->next;

free

(p);

return ok;

}int

main()

大話資料結構 04 3 佇列

1.定義 也是一種線性表 2.抽象資料型別 3.迴圈佇列 1 順序儲存的不足 設乙個佇列的元素數為n,為其建立乙個大於n的陣列,在隊頭刪除元素 下表0 在隊為新增元素 下標最大處 此時會引起兩個問題 1 每次在隊頭刪除元素,若要保證下標始終為0,需要每刪乙個元素,陣列所有元素整體向前移動。時間複雜度...

資料結構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 ...