/**
請編寫乙個程式,按公升序對棧進行排序(即最大元素位於棧頂),
要求最多只能使用乙個額外的棧存放臨時資料,
但不得將元素複製到別的資料結構中。
給定乙個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,...