資料結構與演算法 佇列

2021-10-25 18:25:20 字數 2355 閱讀 6401

初始化入隊

出隊取隊首

判斷是否為空

佇列與棧相似,採用先進先出的規則,就像排隊買票一樣

相對於棧,佇列的結構可能見的更多一些。

與棧一樣,c++的stl庫里其實也寫好了佇列這一結構,可以直接用

#include

#include

//stl中的佇列標頭檔案

using

namespace std;

queue<

int> q;

//宣告乙個int型的佇列

intmain()

while

(!q.

empty()

)return0;

}

stl中的佇列有如下常用的函式:

顧名思義,就是把佇列的首尾接起來,形成乙個迴圈的佇列。佇列依舊滿足先進先出的規則,只是多了乙個首尾相接的功能

佇列

#define maxsize 1000

struct queue

;

實際上,佇列就是換個法子用陣列,不採用原來直接呼叫的方法,而是用兩個新的下標

把這三個東西放到一起,就組成了佇列的基本結構。其中陣列data用來儲存資料,頭「指標」front和尾「指標」rear則以下標的形式呼叫陣列data

q.data[q.front]

;//隊首元素

q.data[q.rear]

;//隊尾元素

迴圈

迴圈主要通過maxsize實現,maxsize是佇列的長度。

與題解——舞伴問題中的思想一樣,採用對maxsize取餘的方法,實現迴圈。在下文「入隊」部分中,會進行比較詳細的描述。

void

initqueue

(queue &q)

入隊的時候,用到尾指標rear,需要將尾指標後移一位,然後存資料

如果佇列是迴圈的,也就是首尾相接,那就會有乙個銜接點,一邊的下標是0,另一邊的下標是maxsize-1

那當q.rear++的時候,如果rear跨過了銜接點,如何表示?

要實現maxsize-1直接跨到0,可以使用取餘的方法,當rear=maxsize-1的時候,如果它再+1,我們寫:

q.rear=

(q.rear+1)

%maxsize;

這樣的話,+1以後的rear變成了maxsize,取余得0

void

push

(queue &q,

int value)

後續**中的取餘思想與這一環節的基本一致,就不再重複說明。

void

pop(queue &q)

int

top(queue q)

一般情況下,棧和佇列中的empty函式,都習慣於讓empty=1代表空,讓empty=0代表非空

bool

empty

(queue q)

資料結構與演算法 佇列

學習了好長 一段時間的資料結構,由於時間關係一直沒有寫部落格。這次打算將這段時間的學習內容寫下來做個整理。佇列作為線性結構的一種,其實用性不用多說。這裡總結下兩種結構的佇列實現。迴圈佇列 先列下以順序表結構形成的普通順序佇列存在的問題 隊頭不斷刪除元素,將使佇列的頭部空出單元 隨著刪除 插入的進行,...

資料結構與演算法 佇列

佇列 佇列與棧不同,它是一種先進先出的結構 實現 1 陣列 2 鍊錶 記錄的資料 1 隊首位置 第乙個元素的位置 2 隊尾位置 最後乙個元素的位置 3 佇列大小 size 佇列操作 entryqueue 入隊 exitqueue 出隊 isqueueempty 隊列為空 isqueuefull 佇列...

演算法與資料結構 佇列

adt queue d d 資料關係 r r a i d,i 2,3,n r 約定a 1a 1 a1 端為隊首,a na n an 端為隊尾。基本操作 create 建立乙個空佇列 emptyque 若隊列為空,則返回true,否則返回false insertque x 向隊尾插入元素x delet...