仅使用递归函数和栈操作逆序一个栈

题目

一个栈依次压入1,2,3, 4, 5,那么从栈顶到栈底分别为5, 4, 3, 2, 1。将这个栈转置后,从栈顶到栈底为1,2,3, 4, 5,也就是实现栈中元素的逆序,但是只能使用递归函数来实现,不能使用其他数据结构。

解题参考和一些坑

共两个递归函数来实现逆序:
第一个函数需要将得到一个栈的栈底,并将栈底元素移除,同时还需要将除栈底外的元素按照原顺序压入栈中
第二个逆序函数需要将取得的元素按照得到的顺序重新压入栈中,得到逆序后的新栈;

这里需要注意的一点是因为在C++中参数传递时需要传引用,否则第二次递归时,使用的栈是未变化的栈,会导致错误结果!!!
#include<iostream>
#include<stack>
using namespace std;

int getAndRemoveLastElement(stack<int> &s1)
{
	int res = s1.top();
	s1.pop();
	if (s1.empty())
		return res;
	else
	{
		int last = getAndRemoveLastElement(s1);
		s1.push(res);
		return last;
	}
}

void reverse(stack<int> &s)
{
	if (s.empty())
		return;
	int i = getAndRemoveLastElement(s);
	reverse(s);
	s.push(i);
}

int main()
{
	stack<int> testStack;
	for (int i = 0; i < 3; i++)
		testStack.push(i);
	reverse(testStack);
	for (int i = 0; i < 3; i++)
	{
		cout << testStack.top() << endl;
		testStack.pop();
	}
	getchar();
	return 0;
}

猜你喜欢

转载自blog.csdn.net/lei_h11/article/details/84249912
今日推荐