本文实例讲述了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小时内与您取得联系。