用一个栈实现另一个栈的排序

来源:互联网 发布:室内网络布线 编辑:程序博客网 时间:2024/05/11 08:52
背景:
一个栈的排序其实是很好做的,但是现在要你将该栈从顶到底从大到小排序,只允许申请一个辅助栈,可以申请有限个变量,除此之外不能再申请额外的数据结构,你该怎么搞?


算法:
设要排序的栈为st,辅助栈为help,从st弹出的元素记为curhelp的栈顶元素记为top
  • 如果cur小于或等于top,则将cur压入help
  • 如果cur大于top,则将help中的元素逐一弹出并压入st,直到cur小于等于top,再将cur压入help
一直执行上述操作,直到st为空结束,这时再把help中的元素一一压回st就行了,算法结束。


代码:
#include <bits/stdc++.h>using namespace std;template<class T>void sortStByHelp(stack<T> &st){    stack<T> help;    while (!st.empty()) {        T cur = st.top();        st.pop();        for (; !help.empty() && cur > help.top(); st.push(help.top()), help.pop());        help.push(cur);    }    for (; !help.empty(); st.push(help.top()), help.pop());}int main(){    stack<int> st({1, 2, -1, 7, 9, 0});    sortStByHelp(st);    for (; !st.empty(); cout << st.top() << endl, st.pop());    return 0;}
阅读全文
0 0
原创粉丝点击