演算法筆記 佇列

2021-09-02 23:05:32 字數 1645 閱讀 9512

是什麼

什麼是佇列

為什麼為什麼有佇列這種資料結構

怎麼學習佇列這種資料結構

順序佇列

class

arrayqueue

//入隊

public

boolean

enqueue

(string item)

last = last - first;

first =0;

queuelist[last]

= item;

last++

;return

true;}

else

}else

}//出列

public string dequeue()

else

}}

用陣列實現的佇列,每次出列的時候,取出陣列中下標為 first 的元素,然後 first 自增一。每次入列的時候,陣列下標為 last 的位置儲存元素,last 自增一。出列的情況,我們只需判斷當時的佇列是否為空佇列就夠了。但是,入列的時候,由於出列導致 first 值一直在自增,入列導致 last 值也在自增,那麼陣列勢必會儲存到最後乙個元素,而陣列的前面由於出列,空餘出了一些位置。所以,這個時候我們就需要把陣列中的元素整體搬移到陣列的最前面,為後續入列提供空間。資料搬移的時候,我們要考慮好邊界條件:first 值不等於 0 且 last 值等於陣列的長度

鏈式佇列

class

linkqueue

private node first;

//佇列頭結點

private node last;

//佇列尾節點

//初始化佇列

public

linkqueue()

//入列

public

boolean

enqueue

(node node)

else

}//出列

public node dequeue()

else

}}

鏈式佇列中,我們需要額外建立兩個節點,乙個是頭節點乙個是尾節點,分別指向第乙個元素和最後乙個元素。隊列為空的條件就是兩個指示節點都指向 null 。由於鍊錶可以自由的申請記憶體空間,所以鏈式佇列理論上是可以無限大的。

迴圈佇列

class

circularqueue

//入隊

public

boolean

enqueue

(string item)

else

}//出列

public string dequeue()

else

}}

從**中我們發現兩個公式 (last + 1) % n 和 (first + 1) % n。通過對比發現,當佇列滿的時候:(last + 1) % n = first。從而得出上述兩個出列與入列時候的標識位獲取新值的公式。注:上述迴圈鍊錶中的最後乙個位置是不能儲存元素的,因為一旦入隊,last == first 就成立了,佇列就是乙個空列,但是實際上是已經儲存滿了。

阻塞佇列和併發佇列

總結初入演算法學習,必是步履蹣跚,一路磕磕絆絆跌跌撞撞。看不懂別慌,也別忙著總結,先讀五遍文章先,無他,唯手熟爾~

與諸君共勉

演算法筆記 佇列

1 佇列是乙個有序列表,可以用陣列或鍊錶來實現.2 遵循先入先出原則.即 先存入佇列的資料,要先取出來.後存入後取.模擬火車進隧道 3 佇列的插入操作稱為入隊 push 刪除操作稱為出隊 pop 4 示意圖 使用陣列模擬佇列示意圖 5 由於普通佇列會產生 假溢位 現象,所以我們採用環形佇列來解決這個...

演算法筆記 佇列

佇列 先進先出 食堂裡打飯,先入隊的人 排在最前的人 則最早打飯出隊。用隊首指標front 出隊 來指向隊首元素的前乙個位置,而rear 入隊 隊尾指標來指向隊尾元素 當用陣列來實現佇列時,隊首指標front和隊尾指標rear為int變數 陣列下標從0開始 而使用鍊錶來實現佇列時,則為int 型變數...

演算法筆記 佇列概念

佇列 queue 時一種先進先出的資料結構 以食堂排隊打飯為例,每個人都從隊伍最後面排起,隊伍最前面的人打完飯出隊 佇列總是從隊尾加入元素,而從隊首移除元素,滿足先進先出的規則 注意!使用乙個隊首元素front來指向隊首元素的前乙個位置 使用乙個隊尾指標rear來指向隊尾元素 和棧類似,當使用陣列來...