請編寫乙個程式,按公升序對棧進行排序,要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。
vector陣列numbers中的第乙個元素就是棧頂元素,公升序排列,即棧頂元素最大
看到這個題,因為可以申請乙個棧用來存放臨時資料,所以我們可以這樣想:
由於棧先進後出的特性,先將原來棧中的資料存放到臨時資料棧中,並且保證臨時棧中的資料是降序排列的,這一過程完成之後,再將臨時資料棧中的元素依次push到返回棧中即可。
具體實現步驟:
(1)申請乙個資料棧s用來存放numbers中的資料,再申請乙個臨時棧tmp用來存放臨時資料
(2)比較s棧彈出的棧頂元素top與tmp的棧頂元素,並進行相應的操作,以確保tmp棧中的資料是降序的,具體比較過程如下:
當s棧不為空時:條件
具體操作
若tmp棧為空或者top<=tmp.top()
就將top元素push到tmp棧中
若tmp棧不為空並且top>tmp.top()
將tmp中比top小的元素都push到s棧中,最後再將top元素push到tmp棧中
(3)此時tmp棧中的棧頂元素為最小值,將tmp棧中的元素依次彈出到s棧中,再將s棧中的元素依次彈出並儲存到乙個vector陣列中。
操作演示圖:
面試題 棧排序
棧排序。編寫程式,對棧進行排序使最小元素位於棧頂。最多只能使用乙個其他的臨時棧存放資料,但不得將元素複製到別的資料結構 如陣列 中。該棧支援如下操作 push pop peek 和 isempty。當棧為空時,peek 返回 1。輸入 sortedstack push push peek pop p...
棧的相關面試題
完整 用乙個額外的棧存放當前棧的最小值。push 當資料棧入元素時做乙個判斷,如果元素小於等於最小棧的棧頂元素,就給兩個元素都入棧。pop 資料棧出元素時,若兩個棧頂元素相等,則兩個棧都出元素,否則只出資料棧。乙個棧入元素,乙個棧出元素。pop 出元素時,如果為空則需要將棧a元素倒到b棧。額外考慮兩...
棧和佇列面試題
遞迴反轉乙個棧 void reverse stack s reverse s int tmp2 s.top s.pop reverse s s.push tmp1 reverse s s.push tmp2 遞迴排序乙個棧 void sort stack s sort s int tmp2 s.to...