今天,我們拉回來講一講數據結構的隊列!
隊列
隊列是一個在一端進行插入,另一端進行刪除的線性表。
打個比方,排隊買東西,排在最前面的買完東西離開隊伍(刪除),最後將要進入排隊買東西的(插入)排在最後,最後買東西。
通常把隊列的刪除與插入分別稱之出隊和入隊。允許出隊的那頭稱之爲隊頭,允許入隊的稱爲隊尾。所有進隊的數據必須從隊尾進入,隊列中的數據只能從隊頭出隊。由於先進先出(先進去排隊的就先買東西),這種表就稱爲先進先出 (FIFO) 表
是不是蒙圈了?不過,我覺得還好。看圖:
這就很清晰明瞭是不?
隊列算法
分爲入隊與出隊:
入隊
int dui[100000];
int head=0,tail=1;
void in(int x)
{
tail++;
if(tail==100000) cout<<"error"; //上溢
dui[tail]=x;
}
出隊
int dui[100000];
int head=0,tail=1;
void in(int &x)
{
x=dui[head];
head++;
}
假溢出情況
基本在小數據量下不用考慮,但在數據量大時需要考慮:
在上溢情況下,head之前還有空的位置,就是假溢出。
這裏給出思路:
1.tail++;
2.如果tail=n+1,則tail=1;
3.如果(head=tail) //真溢出;
否則dui[tail]=x;
關於隊列的方法,結構特點都講完了,下次就是隊列的實地考察。
期待吧!