C++使用递归函数和栈操作逆序一个栈的算法示例
发布时间:2020-12-16 05:10:47 所属栏目:百科 来源:网络整理
导读:本篇章节讲解C++使用递归函数和栈操作逆序一个栈的算法。供大家参考研究具体如下: 题目: 一个栈依次压入1、2、3、4、5,那么栈顶到栈底分别为:5、4、3、2、1。 将这个栈逆置后栈顶到栈底分别为1、2、3、4、5。 用递归函数来实现,不能用其他数
本篇章节讲解C++使用递归函数和栈操作逆序一个栈的算法。分享给大家供大家参考,具体如下: 题目: 一个栈依次压入1、2、3、4、5,那么栈顶到栈底分别为:5、4、3、2、1。 解题思路及代码 1、递归函数一:将栈的栈底元素一个个返回并移除。 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++程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |