只用递归函数实现栈的逆序
一个栈一次压入 1,2,3,4,5, 那么从栈顶到栈底分别为5.4.3.2.1
为了让占栈中逆序,但是只能用递归函数实现,不能用其他数据结构。
思路,
用两个递归函数实现
第一个递归函数实现提取出栈底元素
第二个递归函数实现递归得从栈中拿出栈底元素,再push回去
代码
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<stack>
using namespace std;
void printArr(int N);
void scanfArr(int N);
int arr[1000];
stack<int> stk;
const int INF = 0x3f3f3f3f;
int getLastEle(stack<int> &stk){
int topnum = stk.top();
stk.pop();
if(stk.empty())
return topnum;
int last = getLastEle(stk);
stk.push(topnum);
return last;
}
void reserve(stack<int> &stk){
if(stk.empty())
return;
int bott_num = getLastEle(stk);
reserve(stk);
stk.push(bott_num);
}
int main(){
int N = 5;
scanfArr(N);
printArr(N);
for(int i=0;i<N;i++){
stk.push(arr[i]);
}
reserve(stk);
for(int i=0;i<N;i++){
printf("%d",stk.top());
stk.pop();
}
return 0;
}
void randArr(int N){
srand((int)time(0));
for(int i=0;i<N;i++){
arr[i] =rand()%11-5; //[-5,5];
}
}
void printArr(int N){
for(int i=0;i<N;i++){
printf("%d ",arr[i]);
}
printf("\n");
}
void scanfArr(int N){
for(int i=0;i<N;i++){
scanf("%d",&arr[i]);
}
}