全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++使用递归函数和栈操作逆序一个栈的算法示例

本文实例讲述了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 1
After reverse:
1 2 3 4 5 6
请按任意键继续. . .

希望本文所述对大家C++程序设计有所帮助。


# C++  # 递归函数  #   # 逆序栈  # C++实现递归函数的方法  # C语言递归函数与汉诺塔问题简明理解  # C语言深入分析递归函数的实现  # C语言用递归函数实现汉诺塔  # C语言的递归函数详解  # C语言用递归函数对素数进行判断流程  # 递归  # 分别为  # 数据结构  # 给大家  # 不能用  # 请按  # 来实现  # 所述  # 程序设计  # 移除  # 讲述了  # main  # endl  # 栈逆置后栈顶到栈底  # reverse  # br  # class  # brush  # pre  # cout 


相关文章: 建站之星免费模板:自助建站系统与智能响应式一键生成  如何基于PHP生成高效IDC网络公司建站源码?  如何挑选高效建站主机与优质域名?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  建站VPS配置与SEO优化指南:关键词排名提升策略  网页设计网站制作软件,microsoft office哪个可以创建网页?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?  婚礼视频制作网站,学习*后期制作的网站有哪些?  详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)  Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递  建站之星如何快速解决建站难题?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  如何在云虚拟主机上快速搭建个人网站?  建站主机助手选型指南:2025年热门推荐与高效部署技巧  音响网站制作视频教程,隆霸音响官方网站?  如何通过西部建站助手安装IIS服务器?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  道歉网站制作流程,世纪佳缘致歉小吴事件,相亲网站身份信息伪造该如何稽查?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何制作一个表白网站视频,关于勇敢表白的小标题?  微信小程序制作网站有哪些,微信小程序需要做网站吗?  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  如何用花生壳三步快速搭建专属网站?  建站之星备案是否影响网站上线时间?  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  建站之家VIP精选网站模板与SEO优化教程整合指南  如何在服务器上配置二级域名建站?  建站与域名管理如何高效结合?  C++中引用和指针有什么区别?(代码说明)  建站之星如何快速生成多端适配网站?  南京网站制作费用,南京远驱官方网站?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  表情包在线制作网站免费,表情包怎么弄?  建站之星如何优化SEO以实现高效排名?  如何在沈阳梯子盘古建站优化SEO排名与功能模块?  如何在腾讯云免费申请建站?  建站之星如何取消后台验证码生成?  如何在万网自助建站平台快速创建网站?  制作网站的基本流程,设计网站的软件是什么?  如何通过.red域名打造高辨识度品牌网站?  如何选择高效便捷的WAP商城建站系统?  沈阳制作网站公司排名,沈阳装饰协会官方网站?  儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?  如何在Ubuntu系统下快速搭建WordPress个人网站?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何通过网站建站时间优化SEO与用户体验?  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  如何快速搭建高效服务器建站系统?  如何在IIS管理器中快速创建并配置网站? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。