时间:2021-05-20
本文实例讲述了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 1After reverse:1 2 3 4 5 6请按任意键继续. . .希望本文所述对大家C++程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
C/C++实现递归和栈逆序字符串的实例递归函数调用模型逆序方法voidrevers(char*buf){char*p=buf;if(p==NULL){retur
尾递归简介尾递归是函数返回最后一个操作是递归调用,则该函数是尾递归。递归是线性的比如factorial函数每一次调用都会创建一个新的栈(last-in-firs
本文实例讲述了C++用一个栈实现另一个栈的排序算法。分享给大家供大家参考,具体如下:题目:一个栈中元素类型为整型,现在想将该栈从顶到底按从小到大的顺序排序,只许
内存分配方式简介在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。栈:在执行函数时,函数内局部变量的存储单元都可以在栈上创
1、引入inline关键字的原因在c/c++中,为了解决一些频繁调用的小函数大量消耗栈空间(栈内存)的问题,特别的引入了inline修饰符,表示为内联函数。栈空