棧,順序表和煉表都能實現
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 當佇列中沒有元素時稱為空佇列。佇列的修改是依先進先出的原則進行的。新來的成員總是加入隊尾 即不允許 加塞 每次離開的成員總是...