【演算法】用遞迴顛倒一個棧
題目:用遞迴顛倒一個棧。例如輸入棧{1, 2, 3, 4, 5},1在棧頂。顛倒之後的棧為{5, 4, 3, 2, 1},5處在棧頂。具體分析可以參考:
下面給出原始碼:
//遞迴實現顛倒棧
#include <iostream>
using namespace std;
#include <stack>
// Add an element to the bottom of a stack:
template<typename T> void AddToStackBottom(stack<T>& stack, T t)
{
if(stack.empty())
{
stack.push(t);
}
else
{
T top = stack.top();
stack.pop();
AddToStackBottom(stack, t);
stack.push(top);
}
}
// Reverse a stack recursively in three steps:
// 1. Pop the top element
// 2. Reverse the remaining stack
// 3. Add the top element to the bottom of the remaining stack
template<typename T> void ReverseStack(stack<T>& stack)
{
if(!stack.empty())
{
T top = stack.top();
stack.pop();
ReverseStack(stack);
AddToStackBottom(stack, top);
}
}
template<typename T> void PrintStack(stack<T>& myStack)
{
T element;
while(!myStack.empty())
{
element = myStack.top();
cout<<element<<" ";
myStack.pop();
}
cout<<endl;
}
int main()
{
stack<int> myStack;
myStack.push(1);myStack.push(2);myStack.push(3);myStack.push(4);myStack.push(5);myStack.push(6);
PrintStack(myStack);
myStack.push(1);myStack.push(2);myStack.push(3);myStack.push(4);myStack.push(5);myStack.push(6);
//顛倒
ReverseStack(myStack);
PrintStack(myStack);
return 0;
}
覺得很有意思,兩次用到了遞迴,遞迴真的挺強大的。
相關文章
- 僅用遞迴函式和棧操作逆序一個棧遞迴函式
- 如何僅用遞迴函式和棧操作逆序一個棧遞迴函式
- 每日一演算法:遞迴演算法遞迴
- 每天一道演算法題:顛倒整數演算法
- 一個遞迴查詢遞迴
- 用棧+回溯+非遞迴解決N皇后問題遞迴
- 遞迴演算法遞迴演算法
- setrendertraget 上下顛倒
- 漢諾塔非遞迴棧程式碼遞迴
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 遞迴演算法轉換為非遞迴演算法的技巧遞迴演算法
- 【演算法】遞迴演算法演算法遞迴
- Java遞迴演算法Java遞迴演算法
- 遞迴演算法要素遞迴演算法
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 遞迴轉非遞迴 棧模擬 Recursive to Non-recursive stack simulated 總結遞迴
- 五大演算法程式碼模板(DFS 遞迴非遞迴都算上,是六個)演算法遞迴
- 演算法初探--遞迴演算法演算法遞迴
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- 一個vuepress配置問題,引發的js遞迴演算法思考VueJS遞迴演算法
- 用一個棧實現另一個棧的排序排序
- for 迴圈中倒序 用reverse
- 淺談遞迴演算法遞迴演算法
- JavaScript演算法之遞迴JavaScript演算法遞迴
- mysql處理遞迴的一個例子MySql遞迴
- oracle遞迴(一)Oracle遞迴
- 一個帶CheckBox的樹形目錄javascript的遞迴演算法JavaScript遞迴演算法
- 每天刷個演算法題20160521:二叉樹高度(遞迴與非遞迴)演算法二叉樹遞迴
- 每天刷個演算法題20160525:快速排序的遞迴轉非遞迴解法演算法排序遞迴
- 遞迴演算法程式設計整數因子分解問題的遞迴演算法遞迴演算法程式設計
- Java遞迴演算法的使用Java遞迴演算法
- 演算法分析__遞迴跟蹤演算法遞迴
- 遞迴 & 分治演算法深度理解遞迴演算法
- 演算法學習-遞迴排序演算法遞迴排序
- 漢諾塔非遞迴演算法遞迴演算法
- 什麼是遞迴演算法遞迴演算法
- 30、java中遞迴演算法Java遞迴演算法
- 每天刷個演算法題20160524:阿克曼函式的遞迴轉非遞迴解法演算法函式遞迴