栈中元素排序

栈中元素排序:
题目:一个栈中元素类型为整型,现在想将栈顶到栈底从大到小排序。要求:只能申请一个栈,但可以申请新的变量,不能申请额外的数据结构,如何完成排序。

解析:将要排序的栈记为s,申请的辅助栈记为t,在栈s上执行pop操作,弹出的元素为cur,每次弹出一个元素时,分两种情况:

情况一:如果cur小于或等于t中的栈顶元素,则将cur元素直接压入栈t中。

情况二:如果cur大于t中的栈顶元素,则将t的栈顶元素弹出,逐一压入s中,直到cur小于或等于t的栈顶元素为止,再将cur压入t中。

一直执行以上操作,直到s中的全部元素都压入到t中,最后将t中的元素逐一压入s中,即完成排序。代码如下:

#include <iostream>
#include <vector>
#include <algorithm>
#include <stack>
using namespace std;

void sortStack(stack<int>& s)
{
	if (s.empty())
		return;
	stack<int> tmp;
	while (!s.empty())
	{
		int top = s.top();
		s.pop();
		while (!tmp.empty() && top > tmp.top())
		{
			s.push(tmp.top());
			tmp.pop();
		}
		tmp.push(top);
	}
	while (!tmp.empty())
	{
		s.push(tmp.top());
		tmp.pop();
	}
}

int main(void)
{
	stack<int> s;
	s.push(4);
	s.push(2);
	s.push(5);
	s.push(6);
	s.push(1);
	s.push(8);
	sortStack(s);
	
	system("pause");
	return 0;
}

猜你喜欢

转载自blog.csdn.net/yang20141109/article/details/78009857