資料結構與演算法學習總結 佇列

2021-10-24 13:11:17 字數 1151 閱讀 5793

佇列是一種操作受限的線性表資料結構,具有先進先出的特性,支援在一端(隊尾)插入元素,在另一端(隊頭)刪除元素

先進先出

用陣列實現的佇列叫順序佇列

用鍊錶實現的佇列叫鏈式佇列

入隊enqueue 時間複雜度o(1) 空間複雜度o(1)

出隊dequeue 時間複雜度o(1) 空間複雜度o(1)

迴圈佇列可以解決陣列實現的佇列的資料搬移問題,使用更為廣泛

迴圈佇列實現的關鍵是正確判斷佇列空、佇列滿的條件

在佇列的基礎上增加阻塞操作

在隊列為空的時候,從隊頭取資料會被阻塞,直到佇列中有資料

在佇列滿的時候,從隊尾插入資料會被阻塞,直到佇列有空閒位置,再插入資料,然後再返回

這實際上實現了乙個生產者-消費者模型,並且還可以有效協調生產和消費的速度

執行緒安全的佇列稱為併發佇列

最直接的實現方式的在入隊、出隊時加鎖

基於陣列的迴圈佇列,利用cas原子操作,可以實現非常高效的併發佇列

如何實現無鎖併發佇列:cas+陣列實現方式

入隊前獲取tail位置,入隊時比較tail是否發生變化,如果沒有變化,則允許入隊,否則,本次入隊失敗。出隊前獲取head位置,出隊時比較head是否發生變化,如果沒有變化,則允許出隊,否則,本次出隊失敗。

新任務請求執行緒資源時,如果當時執行緒池沒有空閒執行緒,如何處理?

非阻塞處理方式:直接拒絕任務請求

阻塞處理方式:將請求排隊,等到有空閒執行緒時,取出排隊的請求繼續處理。如何儲存請求(要保證公平地處理排隊的請求,先進先服務)–佇列。

基於鍊錶的實現方式和基於陣列的實現方式的區別:基於鍊錶的實現方式,可以實現乙個無限排序的無界佇列,但是可能導致過多的佇列請求排隊,請求處理的響應時間過長。基於陣列的實現方式,可以實現佇列大小有限的有界佇列,排隊請求超過佇列大小的時候,接下來的請求就會被拒絕,適用於對響應時間敏感的系統。但是合理的設定佇列的大小,也是非常有講究的。

資料結構與演算法學習總結(一)

1.什麼是資料結構和演算法 資料結構,就是一組資料的儲存結構。演算法,就是運算元據的一組方法。資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。2.為什麼要學習資料結構和演算法?1 對個人 資料結構和演算法是程式設計師的必修課程之一,能幫助我們寫出效能更優更好的 演算法,是一種解決問題的思...

資料結構與演算法學習總結(二)

1.什麼是複雜度分析?1 資料結構和演算法解決是 如何讓計算機更快時間 更省空間的解決問題 2 因此需要從執行時間和占用空間兩個維度來評估資料結構和演算法的效能。3 分別用時間複雜度和空間複雜度兩個概念描述效能問題,二者統稱為複雜度。4 複雜度描述的是演算法執行時間 或占用空間 與資料規模的增長關係...

資料結構與演算法學習

我想重新學習一下資料結構與演算法,打好基礎。to measure is to know.我們用演算法複雜度t n 來表示演算法的效率,效能。t n 的取值 所有問題規模為n的問題例項中,將他們的計算成本進行總體的比較,取出最壞情況下的值。有幾點需要catch,1.演算法執行的時間,會根據程式語言,作...