题目描述
一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其他数据结构。
输入描述:
输入数据第一行一个整数N为栈中元素的个数。
接下来一行N个整数X_iX
表示从栈顶依次到栈底的每个元素。
输出描述:
输出一行表示栈中元素逆序后的每个元素
示例1
输入
5
1 2 3 4 5
输出
5 4 3 2 1
解题思路
因为栈只能对栈顶元素进行操作(访问或删除),但要求逆序,即从栈底开始打印,那么使用递归算法,只要将栈顶元素保存在本次函数调用的栈内存,删除掉栈顶元素,不断递归,当函数递归调用结束后打印该元素,那栈中的元素也随着函数调用返回而打印,从而实现了逆序打印。
因为题目输入的数据是从栈顶开始,所以程序中main函数使用了两个栈来对数据正确入栈。
#include<iostream>
#include<stack>
using namespace std;
void print(stack<int>& stk){
if(stk.empty()){
return;
}
int n = stk.top();
stk.pop();
print(stk);
cout<<n<<" ";
}
int main(void){
int n;
cin>>n;
int temp;
stack<int> q,stk;
while(n--){
cin>>temp;
q.push(temp);
}
while(!q.empty()){
temp = q.top();q.pop();
stk.push(temp);
}
print(stk);
}