資料結構 五 佇列

2021-10-09 02:40:27 字數 2000 閱讀 2430

佇列是一種操作受限的線性表,它只能在表的一端插入,在另一端刪除。特點是先進先出(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 ...