1. 程式人生 > >棧· 用一個棧實現另一個棧的排序

棧· 用一個棧實現另一個棧的排序

tro ron 新的 help 結束 pre stack 壓入 元素

題面

用一個棧實現另外一個棧的頂到底降序排序

要求:不能使用額外的數據結構,但可以使用新的變量。

思路(給定棧s, 輔助棧help)

1. 遍歷給定棧(出棧),棧頂出棧cur,與help棧頂比較,如果大於輔助棧頂元素值,那麽輔助棧棧頂元素出棧至s棧,直到help棧頂元素值<=cur

2. help壓入cur

2. s棧空時,排序結束,help棧元素出棧至s棧,排序結束。

(如果要求升序,那麽只要將大小比較符號改反即可)

 1 void sort(stack<int> &s)
 2 {
 3     stack<int> help;
4 while (!s.empty()) 5 { 6 int cur = s.top(); 7 s.pop(); 8 while (!help.empty() && cur > help.top())//如果要求從頂到底升序,改成 < 即可 9 { 10 int tmp = help.top(); 11 s.push(tmp); 12 help.pop(); 13 } 14 help.push(cur);
15 } 16 while (!help.empty()) 17 { 18 int a = help.top(); 19 s.push(a); 20 help.pop(); 21 } 22 }

棧· 用一個棧實現另一個棧的排序