题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。
只消两个递归即可,直接看代码吧!
// reverseStack2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
void AddToStackButton(stack<int>&T,int top)
{
if (T.empty())
{
T.push(top);
}
int top1=T.top();
AddToStackButton(T,top);
T.push(top1);
}
void ReverseStack(stack<int> &T)
{
if (T.empty())
{
return;
}
if (T.size())
{
return ;
}
int top=T.top();
T.pop();
ReverseStack(T);
AddToStackButton(T,top);
}
int _tmain(int argc, _TCHAR* argv[])
{
stack<int>s;
s.push(5);
s.push(4);
s.push(3);
s.push(2);
s.push(1);
ReverseStack(s);
cout<<s.size()<<endl;
while(!s.empty())
{
int num=s.top();
cout<<num<<" ";
s.pop();
}
system("pause");
return 0;
}
// reverseStack2.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
#include <stack>
using namespace std;
void AddToStackButton(stack<int>&T,int top)
{
if (T.empty())
{
T.push(top);
}
int top1=T.top();
AddToStackButton(T,top);
T.push(top1);
}
void ReverseStack(stack<int> &T)
{
if (T.empty())
{
return;
}
if (T.size())
{
return ;
}
int top=T.top();
T.pop();
ReverseStack(T);
AddToStackButton(T,top);
}
int _tmain(int argc, _TCHAR* argv[])
{
stack<int>s;
s.push(5);
s.push(4);
s.push(3);
s.push(2);
s.push(1);
ReverseStack(s);
cout<<s.size()<<endl;
while(!s.empty())
{
int num=s.top();
cout<<num<<" ";
s.pop();
}
system("pause");
return 0;
}