定義:
和棧一樣,是一種操作受限的線性表,其限制為只允許在一頭插入(入隊)在另一頭刪除(出隊)。插入的一端叫隊尾,刪除的一端叫隊首。
特點:
先進先出,像是過獨木橋,先上去的先下來。
儲存結構:
1、順序儲存:
以陣列來實現,指向隊首和隊尾的指標則是陣列首元素和尾元素的下標。
隊空條件:q->front= =q->rear。
隊滿條件:q->rear= =n-1(data陣列的最大下標)。
元素n入隊操作:先將rear加1,然後將元素n放在data陣列的rear位置。
出隊操作:先將front加1,然後取出data陣列中front位置的元素。
定義如下:
#define n 10
typedef struct lei
lei;
注:用普通的陣列儲存佇列元素時,經過出隊操作後的空間無法重複利用。所以,為了不必要的空間浪費,一般把陣列data定義成環形陣列。這樣的話隊空條件將發生變化,有興趣的可自行了解。2、鏈式儲存:以煉表來實現資料儲存,通常為單鏈表。
隊空條件:q->rear= =null(也可以是q->front= =null)。
隊滿條件:這個可以不考慮,因為鍊錶的可擴充套件性。
元素n進隊操作:新建乙個結點存放n(由p指向它),將節點p插入做為尾節點。
出隊操作:取首結點的data值,並將其刪除。
定義如下:
typedef struct qnode
datanode;
typedef struct lei
lei;
注:佇列的陣列實現比較麻煩,需要考慮各種邊界情況,所以通常使用鍊錶形式來實現佇列。為了方便實現,鏈式佇列中的front表示鍊錶的頭節點,而front的next才表示隊頭。基本操作:
initqueue
(q);
//佇列初始化
destroyqueue
(q);
//銷毀佇列
push
(q,n)
;//入隊,在隊尾插入元素n
pop(q,n)
;//出隊,在隊首刪除元素,並將其值賦給n返回
empty
(q);
//判斷是否為空
操作函式實現(順序儲存結構)
void
initqueue
(lei *
&q)//佇列初始化
void
destroyqueue
(lei *
&q)//銷毀佇列
bool push
(lei *
&q,int n)
//入佇列
bool pop
(lei *
&q,int &n)
//出佇列,並返回其值
bool empty
(lei *q)
//判斷佇列是否為空
操作函式實現(線性儲存)
void
initqueue
(lei *
&q)//初始化佇列
void
destroyqueue
(lei *
&q)//銷毀佇列
free
(pre)
;//釋放最後乙個資料結點
}free
(q);
//釋放鏈隊結點
}bool empty
(lei *q)
//判斷是否為空
void
push
(lei *
&q,int n)
//入隊,在隊尾插入新元素
else
//不為空,將新結點連到隊尾,並用rear指向它
}bool pop
(lei *
&q,int &n)
//出隊,並返回元素值
**示例:以順序儲存為例
int main()
,n=11
,i;initqueue
(q);
for(i=
0;i<
10;i++
)printf
("輸出佇列中全部元素:\n");
for(i=
0;i<
10;i++
)printf
("\n\n");
printf
("入隊:%d\n"
,n);
push
(q,n)
;printf
("輸出佇列中全部元素:\n");
while(!
empty
(q))
printf
("\n\n");
printf
("判斷佇列是否為空\n");
if(empty
(q))
else
printf
("佇列不為空\n");
destroyqueue
(q);
return0;
}
輸出如下:
資料結構 佇列
一 佇列的迴圈陣列實現。1 初始化 空佇列。令rear front 0。2 入佇列 約定rear指向佇列尾元素的下乙個位置。入佇列時,先判斷佇列是否已滿,而後將array rear x 然後rear 3 出佇列 約定front指向佇列的首元素位置。出佇列時,先判斷佇列是否為空,而後返回隊首元素re ...
資料結構 佇列
資料參考自 資料結構c 語言描述 佇列是一種先進先出的資料結構,這與棧正好相反。下例是簡單的queue實現 queue.h檔案 ifndef queue h define queue h include include 資料元素結構 自定義 struct datatype 佇列元素最大數 const...
資料結構 佇列
code for fun created by dream whui 2015 1 25 include stdafx.h include include using namespace std define true 1 define false 0 define ok 1 define erro...