如何仅用递归函数和栈操作逆序一个栈
2016-08-22 21:40
232 查看
如何仅用递归函数和栈操作逆序一个栈【题目】
一个栈依次压入 1、2、3、4、5,那么从栈顶到栈底分别为 5、4、3、2、1。将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
#include<string>
#include<iostream>
#include<stack>
using namespace std;
int getAndRemoveLast(stack<int> &stack) {//得到当前栈的栈底元素
int result = stack.top();
stack.pop();
if (stack.empty()) {
return result;
}
else {
int last = getAndRemoveLast(stack);
stack.push(result);
return last;
}
}
void reverse(stack<int> &stack) {//反转栈的函数
if (stack.empty()) {
return;
}
int i = getAndRemoveLast(stack);//得到当前栈的栈底元素
reverse(stack);//递归调用
stack.push(i);
}
int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
reverse(s);
while (s.size()!=0)
{
cout << s.top() << endl;
s.pop();
}
return 0;
}
一个栈依次压入 1、2、3、4、5,那么从栈顶到栈底分别为 5、4、3、2、1。将这个栈转置后,从栈顶到栈底为 1、2、3、4、5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
#include<string>
#include<iostream>
#include<stack>
using namespace std;
int getAndRemoveLast(stack<int> &stack) {//得到当前栈的栈底元素
int result = stack.top();
stack.pop();
if (stack.empty()) {
return result;
}
else {
int last = getAndRemoveLast(stack);
stack.push(result);
return last;
}
}
void reverse(stack<int> &stack) {//反转栈的函数
if (stack.empty()) {
return;
}
int i = getAndRemoveLast(stack);//得到当前栈的栈底元素
reverse(stack);//递归调用
stack.push(i);
}
int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
reverse(s);
while (s.size()!=0)
{
cout << s.top() << endl;
s.pop();
}
return 0;
}
相关文章推荐
- 如何仅用递归函数和栈操作逆序一个栈
- 程序员代码面试指南--如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 栈和队列 如何仅用递归函数和栈操作逆序一个栈
- 003如何仅使用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 栈和队列——如何仅用递归函数和栈操作逆序一个栈
- 程序员面试指南之如何仅用递归函数和栈操作逆序一个栈
- 栈和队列---如何仅用递归函数和栈操作逆序一个栈
- 如何使用递归函数和栈操作逆序一个栈
- 栈和队列(3)--如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈(java实现)
- 3.如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 数据结构 如何仅用递归函数和栈操作逆序一个栈
- 如何仅用递归函数和栈操作逆序一个栈
- 重造轮子 用递归函数和栈操作逆序一个栈
- 1栈和队列--仅用递归函数和栈操作逆序一个栈