题目:
有两个相同的栈,一个里面放着自大到小排列的数,栈顶的数最小,另一个栈是空的。不允许利用其它的数据结构,只能利用这两个栈,要求把第一个栈里的数字反过来,从小到大排列,结果还放在原来的那个栈里面。
#include <stdio.h>
#include <stack>
#include <iostream>
using namespace std;
stack<int>stackA,stackB;
int n;
void reverse()
{
int min;
for(int i=0;i<stackA.size();i++)
{
min=stackA.top();
stackA.pop();
int sic=n-1-i;
while(sic)
{
stackB.push(stackA.top());
stackA.pop();
sic--;
}
stackA.push(min);
while(!stackB.empty())
{
stackA.push(stackB.top());
stackB.pop();
}
}
}
void main()
{
scanf(" %d ",&n);
for(int i=0;i<n;i++)
{
int ci;
scanf("%d",&ci);
stackA.push(ci);
}
reverse();
while(!stackA.empty())
{
printf("%d ",stackA.top());
stackA.pop();
}
}