佇列是只允許在一端進行插入操作,另一端進行刪除操作的線性表,
佇列是一種先進先出(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 ...