国产探花免费观看_亚洲丰满少妇自慰呻吟_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++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 毕节市| 凤山市| 商河县| 周口市| 彭阳县| 文安县| 韩城市| 晋宁县| 梅河口市| 郁南县| 科尔| 惠东县| 黄梅县| 抚顺县| 肥乡县| 民乐县| 忻州市| 璧山县| 长垣县| 凌源市| 富源县| 咸阳市| 伊金霍洛旗| 宜宾市| 策勒县| 二连浩特市| 开阳县| 故城县| 东乡族自治县| 和静县| 信丰县| 平阳县| 葫芦岛市| 桃园县| 象州县| 南和县| 墨江| 襄垣县| 紫云| 昭苏县| 拉萨市|