棧中元素排序

2021-09-28 01:15:04 字數 1788 閱讀 7223

題目描述:設計乙個演算法,將棧中的元素按公升序排列。可另外借用乙個棧來實現。

思路:從主棧中依次彈出棧頂元素壓入輔助棧,每當將要壓入的元素使得輔助棧中的元素不是公升序排列,就將輔助棧裡的元素重新壓入原始棧,直到輔助棧裡的元素都小於當前要壓入的元素,然後再壓入當前元素。

**:假設當前主棧裡的元素是。過程**如下:

(1)最開始時,將元素依次壓入主棧中,此時輔助棧為空。

(2)將主棧棧頂元素1彈出並壓如輔助棧中,此時主棧的棧頂元素變為3,輔助棧中有乙個元素1。接著,將主棧中的棧頂元素3彈出並壓入輔助棧中,此時主棧的棧頂元素為2,輔助棧中元素有1和3,其中3為棧頂元素。

(3)此時需要對主棧中的元素2進行排序,發現2小於輔助棧中的棧頂元素,如果直接壓棧的話會導致輔助棧不再有序。那麼此時我們需要先將主棧中的棧頂元素提取出來,稱為當前元素,然後將輔助棧中比當前要壓棧的元素大的元素彈出壓入主棧中,直到輔助棧中的棧頂元素不再大於當前元素,即小於等於當前元素。之後再把當前元素壓入輔助棧中。需要注意的是,從輔助棧彈出並壓入主棧中的元素在當前元素壓入輔助棧之後不需要從主棧中彈出並重新壓入輔助棧。

(4)此時主棧的棧頂元素是之前從輔助棧中彈出的,接下來對其進行排序。發現此時3大於輔助棧的棧頂元素,即壓入之後不會導致輔助棧的無序,所以可直接壓入。接下來元素4和元素6也一樣,依次從主棧中彈出並壓入輔助棧中即可。之後,主棧中的元素有0和5,其中5為棧頂元素。輔助棧中的棧頂元素為6。

(5)接下來,對主棧的棧頂元素5進行排序。發現其比輔助棧的棧頂元素6小,直接壓入便會導致輔助棧中元素失去以前的順序而變得無序。所以與之前元素2的處理方法一樣。先將主棧中的棧頂元素提取出來,記為當前元素,然後將輔助棧中棧頂元素6彈出並壓入主棧中,然後將當前元素5壓入輔助棧中作為棧頂元素。

(6)然後直接將主棧棧頂元素6壓入輔助棧中作為棧頂元素,規則同上。此時,主棧中只剩乙個元素0。

(7)接下來處理主棧中的最後乙個元素0,因為其小於輔助棧中的所有元素,所以需要將輔助棧中的元素依次彈出壓入主棧中,然後將元素0壓入輔助棧中。

(8)最後一步,將主棧中的元素依次彈出並壓入輔助棧中,此時輔助棧中的元素按公升序排列。主棧為空。

//stack1為主棧,stack2為輔助棧

stacksort(stackstack1)

//如果輔助棧為空或者當前元素比輔助棧棧頂元素大,則將當前元素直接壓入輔助棧中

stack2.push(temp);

}return stack2;

}

棧中元素排序

棧中元素排序 題目 乙個棧中元素型別為整型,現在想將棧頂到棧底從大到小排序。要求 只能申請乙個棧,但可以申請新的變數,不能申請額外的資料結構,如何完成排序。解析 將要排序的棧記為s,申請的輔助棧記為t,在棧s上執行pop操作,彈出的元素為cur,每次彈出乙個元素時,分兩種情況 情況一 如果cur小於...

顛倒棧中元素 棧的逆置

思路 1.使用遞迴pop出棧中元素,直到棧中元素只剩下乙個元素 2.當前第一次遞迴返回的時候,棧中有2個元素,我們再利用另乙個遞迴函式putitem把兩個元素逆置 3.以此遞迴下去,直到棧中元素全部逆置。過程如下 1 1 2,3,4 第乙個遞迴不斷出棧,第一次滿足返回條件時,棧中元素只有 1 2 回...

js中map中元素排序

方法如下 function sort var keys 1 2 3 4 var result map max 999999999 存放每一次拍完序後的,該過程中產生的最大的元素。for var i 0 iif temp map keys k result i temp map max temp co...