棧 佇列和排序

2021-10-13 08:33:25 字數 1433 閱讀 5464

棧,順序表和煉表都能實現

stack() 建立乙個新的空棧

push(item) 新增乙個新的元素item到棧頂

pop() 彈出棧頂元素

peek() 返回棧頂元素

is_empty() 判斷棧是否為空

size() 返回棧的元素個數

佇列和棧同理

queue() 建立乙個空的佇列

enqueue(item) 往佇列中新增乙個item元素

dequeue() 從佇列頭部刪除乙個元素

is_empty() 判斷乙個佇列是否為空

size() 返回佇列的大小

具有佇列和棧的性質的資料結構

deque() 建立乙個空的雙端佇列

add_front(item) 從隊頭加入乙個item元素

add_rear(item) 從隊尾加入乙個item元素

remove_front() 從隊頭刪除乙個item元素

remove_rear() 從隊尾刪除乙個item元素

is_empty() 判斷雙端佇列是否為空

size() 返回佇列的大小

是將一串資料按照規定的順序進行排列的演算法

4.1 氣泡排序

氣泡排序是一種需要重複遍歷要排列的數列,就是一次比較兩個數值,如果順序錯誤交換過來,一直進行到不再需要交換為止,遍歷結束

冒泡演算法操作:

比較相鄰的元素。如果第乙個比第二個大(公升序),就 交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

針對所有的元素重複以上的步驟,除了最後乙個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

時間複雜度:

最優:o(n)

最壞:o(n^2)

穩定性:穩定

4.2 選擇排序

選擇排序演算法操作:

首先在未排序序列中找到最小(大)元素,存放到排序 序列的起始位置,然後,再從剩餘未排序元素中繼續尋找 最小(大)元素,然後放到已排序序列的末尾。直到所有元素均排序完畢。

時間複雜度

最優:o(n^2)

最壞:o(n^2)

穩定性:不穩定

4.3 插入排序

插入排序演算法操作:

通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃瞄,找到相應位置並插入。插入排序在實現上,在從後向前掃瞄過程中,需要反覆把已排序元素逐步向後挪位,為最新元素提供插入空間。

時間複雜度

最優:o(n)

最壞:o(n^2)

穩定性:穩定

棧排序,佇列排序

同學給我出了乙個棧排序的題,意思給乙個包含無序數的棧,讓輸出乙個順序排列的棧。直接排序是不可能的,棧只能在一端進行操作。因此需要借助輔助棧。思路是將原棧s的資料壓入輔助棧s2,輔助棧用於儲存最終結果。輔助棧中的元素是有序的。壓棧過程需要比較兩個棧棧頂元素大小關係。如果s棧頂小於s2的棧頂元素,則需要...

棧和佇列 單調佇列 單調棧

講解部落格鏈結 一 單調棧 1 什麼是單調棧?單調棧是指乙個棧內部元素具有嚴格單調性 單調遞增,單調遞減 的一種資料結構。2 單調棧的兩個性質 滿足從棧頂到棧底具有嚴格的單調性 滿足後進先出的特徵,越靠近棧底的元素越早的進棧。3 元素進棧的過程 對於當前進棧元素x 如果x 棧頂元素,x 進棧。否則 ...

棧和佇列 佇列

佇列 又一種特殊的線性表 佇列 queue 是只允許在一端進行插入,而在另一端進行刪除的運算受限的線性表 允許刪除的一端稱為隊頭 front 允許插入的一端稱為隊尾 rear 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...