标签:stream ble 优先 ever ade dai 结果 move 中间
【题目】
【要求】
【分析】
该算法需要两个递归函数。分别是getAndRemoveLastElement()和Reverse()
函数名 | 描述 |
---|---|
getAndRemoveLastElement | 将栈Stack的栈底元素返回并移除。作为中间步骤被Reverse使用 |
Reverse | 算法的入口。主要功能为将栈顶元素优先压入栈中(放在栈底) |
function getAndRemoveLastElement
result=stack.pop();
if stack为空
返回结果result
else
last=getAndRemoveLastElement();
stack.push(result) //重新将取出的非栈底元素放回
return last
if stack为空
返回结果result
last=getAndRemoveLastElement();
stack.push(result) //重新将取出的非栈底元素放回
return last
function Reverse
if stack为空
return; //禁止实现后面的操作
int i=getAndRemoveLastElement()
Reverse()
i入栈
【实现】
/*仅用递归函数和栈操作逆序一个栈*/
#include<iostream>
#include<stack>
using namespace std;
//第一个递归函数
int getAndRemoveLastElement(stack<int> *_stack)
{
int result=_stack->top(); //首先出栈
_stack->pop();
if(_stack->empty()) //当出栈后为空时,证明result就是栈底元素
return result; //返回栈底元素
else
{
//递归调用该函数,last一直被赋值为栈底元素
int last=getAndRemoveLastElement(_stack);
_stack->push(result); //将非栈底元素重新压回栈中
return last; //一直返回栈底元素
}
}
//第二个递归函数
void Reverse(stack<int> *_stack)
{
if(_stack->empty()) //如果已经操作到最后一个取出的栈底元素(即为栈顶元素),就无任何操作的返回
return;
int i=getAndRemoveLastElement(_stack);
//未到栈顶元素,继续递归
Reverse(_stack);
_stack->push(i);
}
int main()
{
stack<int> test;
stack<int> *p=&test;
int temp;
for(temp=1;temp<6;temp++)
test.push(temp);
Reverse(p);
cout<<"逆置之后"<<endl;
while(!test.empty())
{
cout<<test.top()<<" ";
test.pop();
}
}
标签:stream ble 优先 ever ade dai 结果 move 中间
原文地址:https://www.cnblogs.com/ZhuSenlin/p/12384477.html