佇列是乙個有序列表,可以用陣列或者鍊錶來實現,遵循先入先出的原則。
front指向佇列頭的資料前乙個位置,rear指向隊尾元素。利用者兩個變數front及rear分別記錄佇列前後端的下標,front會隨著資料輸出而改變,而rear則是隨著資料輸入而改變。
下面利用陣列建立乙個含有三個元素的佇列,**及注釋如下:
public
class
arrayqueuedemo
catch
(exception e)
break
;case
'h':
trycatch
(exception e)
break
;case
'e':
scanner.
close()
; loop =
false
;break
;default
:break;}
} system.out.
println
("程式退出~");
}}class
arrayqueue
public
boolean
isfull()
//由兩個指標位置來判斷佇列是否為滿
public
boolean
isempty()
//由兩個指標位置來判斷佇列是否為空
public
void
addqueue
(int n)
rear++
; arr[rear]
= n;
}public
intgetqueue()
front++
;return arr[front];}
public
void
showqueue()
for(
int i =
0; i public
intheadqueue()
return arr[front+1]
;}}
上述**表示的是乙個簡單的佇列,但是可以發現這種佇列已經被取出元素的地方不能夠繼續使用,也就是當取出佇列中所有元素後,不能再新增元素。因此引出環形佇列。
front初始值為0,rear初始值為0。front指向佇列的第乙個元素,rear指向隊尾元素的後乙個位置。空出乙個位置作為約定。當佇列滿時條件是:(rear+1) % maxsize = front。當佇列空時條件是:rear = front。佇列中有效資料個數為:(rear + maxsize - front) % maxsize。
public
class
circlearrayqueuedemo
catch
(exception e)
break
;case
'h':
trycatch
(exception e)
break
;case
'e':
scanner.
close()
; loop =
false
;break
;default
:break;}
} system.out.
println
("程式退出~");
}}//建立環形佇列
class
circlearray
public
boolean
isfull()
public
boolean
isempty()
public
void
addqueue
(int n)
arr[rear]
= n;
rear =
(rear+1)
% maxsize;
//這裡必須取模,因為陣列長度有限,而rear值可以不斷增加的
}public
intgetqueue()
int value = arr[front]
; front =
(front +1)
% maxsize;
//同樣的道理,因為陣列長度有限,而front值可以不斷增加的
return value;
}public
void
showqueue()
//從front開始遍歷
for(
int i = front; i < front +
size()
; i++)}
public
intsize()
public
intheadqueue()
return arr[front];}
}
佇列(二)佇列的鍊錶儲存
include define false 0 define ok 1 定義佇列每個節點的結構 typedef struct node node,qnode 相當於typedef struct node qnode 定義整個佇列結構 typedef struct squeue squeue 建立乙個空...
二 佇列再探之迴圈佇列
佇列再探 類似排隊 先進先出 迴圈佇列 日期 11.3 變化 順序佇列 變成 迴圈佇列 關鍵 用取餘操作實現在陣列的範圍內 和 迴圈佇列隊滿條件 注意這裡會多乙個空餘資料空間 建議 畫圖理解最佳 include 包含malloc函式的標頭檔案 include struct queue typedef...
佇列判空 (二)佇列的實現
源於生活,抽象生活。生活中的佇列 當然是停車場排隊出場啦。計算機的佇列 簡答的說就是先入先出 fifo 在大腦中要有的概念是 隊頭 狀態 就是排隊第乙個交錢準備出場的車 隊尾 狀態 最後乙個排隊準備交錢的車 入隊 動作 add.把車開入 出停車場的道 出棧 動作 out.交完錢,把車開出停車場。fi...