【演算法】用遞迴顛倒一個棧
題目:用遞迴顛倒一個棧。例如輸入棧{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;
}
覺得很有意思,兩次用到了遞迴,遞迴真的挺強大的。
相關文章
- 輸入一個數倒序輸出(遞迴)遞迴
- 棧Stack——遞迴替身?遞迴
- 棧實現遞迴遞迴
- 每日一演算法:遞迴演算法遞迴
- 每天一道演算法題:顛倒整數演算法
- 遞迴演算法遞迴演算法
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 【演算法】遞迴演算法演算法遞迴
- Java遞迴演算法Java遞迴演算法
- 遞迴演算法要素遞迴演算法
- 顛倒原理題解
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼
- 反轉連結串列(遞迴與棧)遞迴
- 遞迴轉非遞迴 棧模擬 Recursive to Non-recursive stack simulated 總結遞迴
- 五大演算法程式碼模板(DFS 遞迴非遞迴都算上,是六個)演算法遞迴
- 演算法初探--遞迴演算法演算法遞迴
- 一個vuepress配置問題,引發的js遞迴演算法思考VueJS遞迴演算法
- 揹包問題的遞迴與非遞迴演算法遞迴演算法
- JavaScript演算法之遞迴JavaScript演算法遞迴
- 淺談遞迴演算法遞迴演算法
- for 迴圈中倒序 用reverse
- Python進階-演算法-遞迴Python演算法遞迴
- 遞迴 & 分治演算法深度理解遞迴演算法
- Java遞迴演算法的使用Java遞迴演算法
- 演算法分析__遞迴跟蹤演算法遞迴
- Python遞迴演算法詳解Python遞迴演算法
- 這個遞迴不太難遞迴
- 《演算法筆記二》連結串列、棧、佇列、遞迴、雜湊表、順序表演算法筆記佇列遞迴
- 遞迴和尾遞迴遞迴
- 【電腦科學】演算法——遞迴演算法遞迴
- 遞迴與分治演算法練習遞迴演算法
- 二十一、氣泡排序演算法——JAVA實現(遞迴與非遞迴)排序演算法Java遞迴
- 二叉樹——後序遍歷的遞迴與非遞迴演算法二叉樹遞迴演算法
- [演算法系列]遞回應用——二叉樹(2):一種帶資訊遞迴返回的求解方式演算法二叉樹遞迴
- 用 JavaScript 的方式理解遞迴JavaScript遞迴
- 快速排序【遞迴】【非遞迴】排序遞迴
- 刷題系列 - 用遞迴和遍歷兩個方法反轉一個單鏈佇列遞迴佇列
- 樹3-二叉樹非遞迴遍歷(棧)二叉樹遞迴
- Python基礎之棧與佇列及遞迴目錄Python佇列遞迴