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 'ejs'的解决办法
创业网站制作流程,创业网站可靠吗?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
Android okhttputils现在进度显示实例代码
详解Android中Activity的四大启动模式实验简述
ChatGPT 4.0官网入口地址 ChatGPT在线体验官网
Laravel如何集成第三方登录_Laravel Socialite实现微信QQ微博登录
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
如何在万网利用已有域名快速建站?

