用递归颠倒一个栈。例如输入栈1,2,3,4,5,1在栈顶。颠倒之后的栈为5,4,3,2,1,5处在栈顶。生成C++代码
时间: 2024-10-18 17:13:58 浏览: 21
在C++中,你可以使用递归来实现这个功能,因为栈本质上是一个后进先出(LIFO)的数据结构,所以我们可以模拟退栈的过程来完成反转。这里是一个简单的递归函数实现:
```cpp
#include <stack>
#include <iostream>
// 创建一个新的空栈,用于存储反转后的元素
std::stack<int> reverseStack(std::stack<int>& originalStack) {
if (originalStack.empty()) { // 如果原栈为空,返回新的空栈
return std::stack<int>();
} else {
// 从原栈弹出顶部元素并压入新栈
int top = originalStack.top();
originalStack.pop(); // 减少原栈元素
// 继续对剩余元素进行递归反转
std::stack<int> reversedPart = reverseStack(originalStack);
// 将顶级元素推回新栈的顶部
reversedPart.push(top);
return reversedPart;
}
}
int main() {
std::stack<int> inputStack;
inputStack.push(1);
inputStack.push(2);
inputStack.push(3);
inputStack.push(4);
inputStack.push(5);
std::cout << "Original stack elements: ";
while (!inputStack.empty()) {
std::cout << inputStack.top() << " ";
inputStack.pop();
}
std::stack<int> reversedStack = reverseStack(inputStack);
std::cout << "\nReversed stack elements: ";
while (!reversedStack.empty()) {
std::cout << reversedStack.top() << " ";
reversedStack.pop();
}
return 0;
}
```
当你运行这段代码,它将首先打印原始栈的内容,然后显示反转后的栈内容。
阅读全文