颠倒栈 {5,4,3,2,1}-->{1,2,3,4,5}
题目:用递归颠倒一个栈。例如输入栈{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;
}
上一篇: lintcode
推荐阅读
-
颠倒栈 {5,4,3,2,1}-->{1,2,3,4,5}
-
数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1
-
java-66-用递归颠倒一个栈。例如输入栈{1,2,3,4,5},1在栈顶。颠倒之后的栈为{5,4,3,2,1},5处在栈顶...
-
判断元素出栈、入栈顺序的合法性。如:入栈的序列(1,2,3,4,5),出栈序列为(4,5,3,2,1)是合法序列
-
JavaScript用递归方法实现颠倒栈的元素
-
JavaScript用递归方法实现颠倒栈的元素
-
编写一个程序,将一个一维数组的元素逆序存放并输出。例如,原顺序为1,2,3,4,5,逆序后为 5,4,3,2,1.