您的位置:首页 > 其它

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

2017-10-30 02:10 267 查看
背景:
一个栈的排序其实是很好做的,但是现在要你将该栈从顶到底从大到小排序,只允许申请一个辅助栈,可以申请有限个变量,除此之外不能再申请额外的数据结构,你该怎么搞?

算法:
设要排序的栈为
st
,辅助栈为
help
,从
st
弹出的元素记为
cur
help
的栈顶元素记为
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: