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

发布时间 - 2026-01-11 01:03:50    点击率:

本文实例讲述了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 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用西部建站助手快速创建专业网站?  Laravel怎么自定义错误页面_Laravel修改404和500页面模板  如何自定义建站之星网站的导航菜单样式?  如何用花生壳三步快速搭建专属网站?  EditPlus 正则表达式 实战(3)  Microsoft Edge如何解决网页加载问题 Edge浏览器加载问题修复  Zeus浏览器网页版官网入口 宙斯浏览器官网在线通道  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】  jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】  Laravel如何使用Contracts(契约)进行编程_Laravel契约接口与依赖反转  北京网站制作公司哪家好一点,北京租房网站有哪些?  高防服务器如何保障网站安全无虞?  如何用搬瓦工VPS快速搭建个人网站?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  微信小程序 canvas开发实例及注意事项  Laravel如何实现API版本控制_Laravel API版本化路由设计策略  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  javascript读取文本节点方法小结  魔方云NAT建站如何实现端口转发?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel如何实现数据库事务?(DB Facade示例)  如何将凡科建站内容保存为本地文件?  python中快速进行多个字符替换的方法小结  微信小程序 五星评分(包括半颗星评分)实例代码  西安专业网站制作公司有哪些,陕西省建行官方网站?  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  如何在建站之星绑定自定义域名?  Laravel怎么为数据库表字段添加索引以优化查询  打开php文件提示内存不足_怎么调整php内存限制【解决方案】  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Android GridView 滑动条设置一直显示状态(推荐)  Laravel定时任务怎么设置_Laravel Crontab调度器配置  公司网站制作需要多少钱,找人做公司网站需要多少钱?  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Angular 表单中正确绑定输入值以确保提交与验证正常工作  Claude怎样写结构化提示词_Claude结构化提示词写法【教程】  node.js报错:Cannot find module &#39;ejs&#39;的解决办法  创业网站制作流程,创业网站可靠吗?  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  Android okhttputils现在进度显示实例代码  详解Android中Activity的四大启动模式实验简述  ChatGPT 4.0官网入口地址 ChatGPT在线体验官网  Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录  Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】  如何在万网利用已有域名快速建站?