题目:
解答:
利用两个栈s1,s2,其中s1存放排序数据,
当执行push()时,若s1.top()<val,将所有小于val的元素放入s2,再将val压入s1中,最后将s2中的元素放入s1中,实现s1的排序push。
1 class SortedStack { 2 public: 3 stack<int>s1; 4 stack<int>s2; 5 SortedStack() 6 { 7 8 } 9 10 void push(int val) 11 { 12 while(!s1.empty()&&s1.top()<val) 13 { 14 s2.push(s1.top()); 15 s1.pop(); 16 } 17 s1.push(val); 18 while(!s2.empty()) 19 { 20 s1.push(s2.top()); 21 s2.pop(); 22 } 23 } 24 25 void pop() 26 { 27 if(!s1.empty()) 28 { 29 s1.pop(); 30 } 31 } 32 33 int peek() 34 { 35 if(!s1.empty()) 36 { 37 return s1.top(); 38 } 39 return -1; 40 } 41 42 bool isEmpty() 43 { 44 return s1.empty(); 45 } 46 }; 47 48 /** 49 * Your SortedStack object will be instantiated and called as such: 50 * SortedStack* obj = new SortedStack(); 51 * obj->push(val); 52 * obj->pop(); 53 * int param_3 = obj->peek(); 54 * bool param_4 = obj->isEmpty(); 55 */
原文:https://www.cnblogs.com/ocpc/p/12861101.html