用一个栈实现另一个栈的排序
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; }
相关文章推荐
- 004使用一个栈对另一个栈完成排序(C++实现)
- 编写一个多线程函数实现对数组排序,要求: 1.至少用两个线程 2.数组的元素值可以事先定义好,或者可以从键盘输入(增加一个线程)。 3.用一个线程对数组排序,用另一个线程输出排序结果。 4.保证先排好序,再输出。
- 用一个栈实现另一个栈的排序
- 栈和队列---用一个栈实现另一个栈的排序
- 用一个辅助栈,来实现另一个栈的排序
- 栈和队列——用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序(java实现)
- 栈和队列(5)——用一个栈实现对另一个栈的排序
- 栈和队列之用一个栈实现另一个栈的排序
- 1栈和队列--用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序(每日一道算法题)
- 左神的书——《程序员代码面试指南》之用一个栈实现另一个栈的排序c++实现
- 数据结构5 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- C++ 使用一个栈实现另一个栈的排序
- 程序员面试指南之用一个栈实现另一个栈的排序
- 用一个栈来实现另一个栈的排序
- 程序员代码面试指南--用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序
- 用一个栈实现另一个栈的排序