C 雙棧排序

2021-09-25 13:51:52 字數 1128 閱讀 4137

/**

請編寫乙個程式,按公升序對棧進行排序(即最大元素位於棧頂),

要求最多只能使用乙個額外的棧存放臨時資料,

但不得將元素複製到別的資料結構中。

給定乙個int numbers(c++中為vector),

其中第乙個元素為棧頂,請返回排序後的棧。

請注意這是乙個棧,意味著排序過程中你只能訪問到最後乙個元素。

演算法:題目中說只能使用乙個額外的棧解決問題,則說明使用的這個額外的棧

就將是最終排序完成的棧。

將輸入的待排序的棧記作stack1,最終排序好的棧記作stack2

假設排序過程中的一般情形

stack1包含沒有經過排序的n-m個元素,stack2中是已經排序好的m個元素

stack1 stack2

棧頂部1

5 3

10 8

7 12 棧底部

類似插入排序的思路,stack1棧頂元素就是當前的待排序元素,需要從stack2

中找到合適的位置,將stack1中的元素放入

具體步驟如下:

step1:將stack1棧頂元素彈出,記作temp數值

step2:從stack2中找到合適的位置,(合適的位置是指將temp數值插入到stack2中的位置)

查詢演算法如下:指標一直指向stack2的棧頂元素,

while(棧頂元素大於temp數值)

直到stack2的棧頂元素小於或者等於temp數值,while迴圈結束

step3:

此時stack2的棧頂位置就是將temp數值插入的位置,

再將之前彈出到stack1中的元素都彈回到stack2中,

step4:

當前在關注stack1的棧頂元素,回到步驟1,一直到stack1為空終止

**/#includeusing namespace std;

#includeclass twostacks

vectorstack2;// vector模板類的預設建構函式,建立空向量

while(numbers.size()>0)

return 0;

}

1002 雙棧排序

description tom最近在研究乙個有趣的排序問題。如圖所示,通過2個棧s1和s2,tom希望借助以下4種操作實現將輸入序列公升序排序。操作a 如果輸入序列不為空,將第乙個元素壓入棧s1 操作b 如果棧s1不為空,將s1棧頂元素彈出至輸出序列 操作c 如果輸入序列不為空,將第乙個元素壓入棧s...

雙棧排序練習

題目 請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。解題思路...

nowcoder 雙棧排序

請編寫乙個程式,按公升序對棧進行排序 即最大元素位於棧頂 要求最多只能使用乙個額外的棧存放臨時資料,但不得將元素複製到別的資料結構中。給定乙個int numbers c 中為vector 其中第乙個元素為棧頂,請返回排序後的棧。請注意這是乙個棧,意味著排序過程中你只能訪問到第乙個元素。測試樣例 1,...