欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

颠倒栈 {5,4,3,2,1}-->{1,2,3,4,5}

程序员文章站 2022-07-15 12:15:29
...

题目:用递归颠倒一个栈。例如输入栈{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;
}