棧排序。 編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構(如陣列)中。該棧支援如下操作:push、pop、peek 和 isempty。當棧為空時,peek 返回 -1。思路:利用兩個棧,分別實現大頂堆和小頂堆,以小頂的棧為主棧,另乙個棧為輔助棧,其中小頂的棧的資料全部會大於大頂的棧的數值。當新增資料的時候,分為三種情況:leetcode.
如圖描述了乙個值入棧的過程,首先比較其與兩個棧頂的值,發現其大於小頂棧的棧頂,所以,小頂棧的棧頂元素彈出到大頂棧,然後再比較,這個值小於小頂棧的棧頂,大於大頂棧的棧頂,所以,就可以壓入小頂棧的棧頂,從而保持了兩個棧的有序性。
如果某一棧為空,那麼利用最大值或最小值進行比較。
需要彈出資料的時候將輔助棧的數值全部彈出到主棧中,然後返回主棧的棧頂元素。
// created by lippon
class
sortedstack
public
void
push
(int val)
else
if(val < min)
else}}
public
void
pop(
)public
intpeek()
public
boolean
isempty()
}
兩個棧(資料棧 空棧)如何實現排序?
分析 無論是從小到大排序,還是從大到小排序,重要的是按照層次找出最大 最小數 資料棧 stack 輔助棧 help 設定游標數cur 每次help中的數比cur大,則彈出,然後再push進cur 小 一次迴圈,也就是help中的都時push進 從小到大的數,即小數壓底 直到stack彈空,在將hel...
利用兩個佇列實現棧 進棧和出棧
根據兩個佇列實現乙個棧,大致思路與我上篇部落格 根據兩個棧實現乙個佇列 類似 所以直接貼出 兩個佇列實現乙個棧,思路 與 兩個棧實現乙個佇列基本類似 我發過部落格 include include using namespace std template class mystack mystack v...
兩個棧實現佇列 兩個佇列實現棧
1.兩個棧實現佇列 大致思路 入佇列時,將元素入棧s1,出佇列時,將s2中的元素出棧即可,如果s2為空,那麼將s1中 s1.size 1 個元素出棧,加入到s2中,然後將s1中最後乙個元素出棧,即完成了出佇列的操作 include using namespace std include includ...