棧的面試題 對棧進行公升序排列

2021-08-20 18:38:23 字數 954 閱讀 1971

請編寫乙個程式,按公升序對棧進行排序,要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。

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...