棧是一種操作受限的線性表,只允許在一端刪除和新增資料。
特定的資料結構是對特定使用場景的抽象,陣列和鍊錶暴露的介面太多,操作靈活自由,但是使用起來不可控,容易出錯。
棧可以陣列和鍊錶實現。陣列實現叫做順序棧,鍊錶實現叫做鏈式 棧。儲存資料只需要大小為n的陣列就夠了,出棧和入棧過程中,只需要一兩個臨時變數儲存空間,空間複雜度是o(1)。出棧和入棧時間複雜度都是o(1)。支援動態擴容的順序棧,入棧最 好情況時間複雜度是o(1),最壞o(n),平均時間複雜度是o(1).均攤時間複雜度一般都是最好情況時間複雜度。
先進後出、後進先出。
某個資料集合只涉及在一端插入和刪除資料,並且滿足後進先出、先進後出的特性,用棧這種資料結構。
函式呼叫、表示式求值、括號匹配
佇列是一種操作受限的線性表,入隊放乙個元素到對尾,出隊從佇列頭部取乙個元素。
特定的資料結構是對特定使用場景的抽象,陣列和鍊錶暴露的介面太多,操作靈活自由,但是使用起來不可控,容易出錯。
佇列可以陣列和鍊錶實現。陣列實現叫做順序佇列,鍊錶實現叫做鏈式佇列。出隊和入棧時間複雜度都是o(1)。基於鍊錶實現方法,入隊tail->next=new_node,tail=tail->next.
陣列實現佇列時tail=n,會資料搬移,這樣入隊操作效能會受影響。把陣列的首尾相連就是迴圈佇列。寫迴圈佇列的實現需要注意的是隊空head=tail和隊滿(tail+1)%n=head的判定條件。隊滿時,tail指向的位置實際是不儲存資料的,所以會浪費乙個陣列的儲存空間。
先進先出,在對尾插入插入元素,在對頭刪除元素。
執行緒池請求排隊,用於任何有限資源池,用於排隊請求。對於大部分資源有限的場景,沒有空閒資源時,基本都可以用「佇列」這種資料結構來實現請求排隊。
應用廣泛,特別是一些有特定額外特性的佇列,比如迴圈佇列、阻塞佇列、併發佇列。在很多偏底層系統、框架、中介軟體的開發中,起關鍵作用。
資料結構之棧 佇列
佇列只允許在同一端進行插入和刪除資料,也是一種線性表結構,後進者先出,先進者後出,是典型的 棧 結構。相比於陣列和鍊錶,棧只會帶來更多的限制,從功能來說,陣列或者鍊錶完全可以替代棧,為什麼還需要棧呢?棧把功能縮小使之更加單一,是為了避免暴露太多的操作介面,使用起來更加安全可控,不容易出錯。棧既可以用...
資料結構之棧和佇列
棧 stack 是限定僅在表尾進行插入和刪除操作的線性表。我們把允許插入和刪除的一端稱為棧頂 top 另一端稱為棧底 bottom 不含任何資料元素的棧稱為空棧。棧又稱為後進先出 last in first out 的線性表,簡稱lifo結構。棧的插入操作,叫做進棧,也稱壓棧 入棧。類似子彈入彈夾。...
資料結構之棧和佇列
棧是乙個非常常見的資料結構,它在計算機領域中被廣泛的使用,比如作業系統會給每個執行緒分配乙個棧。用來儲存函式呼叫時各個函式的引數,返回值以及臨時變數等。棧的特點是先進後出。通常棧是乙個不考慮排序的資料結構,我們需要o n 時間才能找到棧中的最大值或者最小值,如果想要在o 1 時間內找到棧中的最大值或...