国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++使用遞歸函數和棧操作逆序一個棧的算法示例

2020-01-26 14:09:35
字體:
來源:轉載
供稿:網友

本文實例講述了C++使用遞歸函數和棧操作逆序一個棧的算法。分享給大家供大家參考,具體如下:

題目:

一個棧依次壓入1、2、3、4、5,那么棧頂到棧底分別為:5、4、3、2、1。
將這個棧逆置后棧頂到棧底分別為1、2、3、4、5。
用遞歸函數來實現,不能用其他數據結構。

解題思路及代碼

1、遞歸函數一:將棧的棧底元素一個個返回并移除。
2、遞歸函數二:逆序棧,調用遞歸函數一實現。

C++實現:

class Solution{public:  //遞歸函數一  static int getAndRemoveStackLastElem(stack<int>& s)  {    int result = s.top();    s.pop();    if (s.empty())      return result;    else    {      int last = getAndRemoveStackLastElem(s);      s.push(result);      return last;    }  }  //遞歸函數二  static void reverseStack(stack<int>& s)  {    if (s.empty())      return;    int i = getAndRemoveStackLastElem(s);    reverseStack(s);    s.push(i);  }};

程序測試用例:

#include <iostream>#include <stack>using namespace std;class Solution{public:  static int getAndRemoveStackLastElem(stack<int>& s)  {    int result = s.top();    s.pop();    if (s.empty())      return result;    else    {      int last = getAndRemoveStackLastElem(s);      s.push(result);      return last;    }  }  static void reverseStack(stack<int>& s)  {    if (s.empty())      return;    int i = getAndRemoveStackLastElem(s);    reverseStack(s);    s.push(i);  }};//打印棧void show(stack<int> s){  while (!s.empty())  {    cout << s.top() << " ";    s.pop();  }  cout << endl;}int main(){  stack<int> s;  s.push(1);  s.push(2);  s.push(3);  s.push(4);  s.push(5);  s.push(6);  cout << "Before reverse: " << endl;  show(s);  cout << "After reverse: " << endl;  Solution::reverseStack(s);  show(s);  system("pause");}

運行結果:

Before reverse:6 5 4 3 2 1After reverse:1 2 3 4 5 6請按任意鍵繼續. . .

希望本文所述對大家C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 鞍山市| 宣武区| 崇州市| 水城县| 平潭县| 元朗区| 东港市| 确山县| 礼泉县| 兴和县| 朝阳市| 启东市| 秦安县| 阿拉善右旗| 如东县| 平山县| 额尔古纳市| 阿拉善盟| 鄂温| 临武县| 平度市| 内丘县| 温宿县| 宜春市| 日喀则市| 丰县| 乌海市| 青浦区| 宜春市| 普宁市| 茂名市| 宁陵县| 汕尾市| 且末县| 尚志市| 开江县| 平和县| 新田县| 毕节市| 屏山县| 武义县|