佇列是一種操作受限的線性表,它只能在表的一端插入,在另一端刪除。特點是先進先出(fifo)。
其儲存方式有順序儲存和鏈式儲存。
順序佇列:
順序佇列會出現假溢位現象。如圖。雖然陣列前面還有空間,但是由於rear已經指向了陣列的最後,佇列無法再入隊,形成了假溢位。解決的辦法是使用迴圈佇列。
//判斷隊空
bool
isempty()
else
return
false;}
//判斷隊滿,假溢位
bool
isfull()
else
return
false;}
//入隊
bool
pushqueue
(datatype newone)
else
}//出隊
bool
popqueue()
else
}//得到隊首元素
datatype gettop()}};
迴圈佇列
迴圈佇列就是將順序佇列想象成乙個在邏輯上首尾相接的環,從而解決假溢位的問題。
如圖。
由圖可知,當判斷迴圈隊列為空或者為滿時,條件都是head=tail,因此為了區分隊列為空還是隊列為滿,將犧牲乙個空間,即當(tail+1)%maxsize==head的時候,就認為是佇列滿了。
typedef
int datatype;
const
int maxsize=10;
struct cirqueue
//判斷迴圈佇列是否為空
bool
isempty()
else
return
false;}
//判斷迴圈佇列是否為滿
bool
isfull()
else
return
false;}
//入隊
bool
pushqueue
(datatype newone)
else
}//出隊
bool
popqueue()
else
}//得到隊首元素
datatype gettop()}};
鏈式佇列:
乙個有頭結點的,含有頭指標和尾指標的單鏈表來表示佇列。尾指標指向的是佇列尾部。
注意出棧時,會出現出棧後棧為空的情況,這時需要將尾指標重新指向頭結點,否則會出現尾指標指向的元素被釋放,尾指標指向非法位置的情況。
typedef
int datatype;
struct nodes
;//帶頭結點的
struct linkqueue
//判斷隊列為空
bool
isempty()
else
return
false;}
//入隊
void
pushqueue
(datatype newone)
//出隊
bool
popqueue()
else
free
(temp)
;return
true;}
}//得到隊首元素
datatype gettop()}};
圖源網路,侵刪。 資料結構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 ...
資料結構 七 佇列
1 佇列需要具備的特性 佇列和棧的底層實現資料結構可以是 陣列 鍊錶,只不過在此基礎上,佇列和棧需要過載兩個函式 節點的插入與刪除函式。佇列只能從煉表頭刪除節點,從鍊錶末尾插入節點 2 示例 ifndef data struct queue h define data struct queue h ...