1.3 仅用递归函数和栈操作逆序一个栈
Posted latup
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1.3 仅用递归函数和栈操作逆序一个栈相关的知识,希望对你有一定的参考价值。
题目:一个栈依次压入1,2,3,4,5,那么从栈顶到栈底分别为5,4,3,2,1。将这个栈转置后,从栈顶到栈底为1,2,3,4,5,也就是实现栈中元素的逆序,但是只能用递归函数来实现,不能用其它数据结构。
1 //仅用递归函数和栈操作逆序一个栈 2 #include <stdio.h> 3 #include "stack.h" //该头文件包含栈操作的原型声明等相关信息 4 5 SqStack stack; 6 7 //获取栈底元素并删除 8 int getAndRemoveLastElement(SqStack *stack) 9 { 10 int result, last; 11 12 result = Pop(stack); 13 if(EmptyStack(*stack)) //栈空,则返回栈底元素 14 { 15 return result; 16 } 17 else 18 { 19 last = getAndRemoveLastElement(stack); 20 Push(stack, result); //将先前弹出的元素重新压入栈中,此时栈的第一个元素被第二个元素覆盖,相当于删除了栈底元素 21 return last; //栈的第一个元素被返回 22 } 23 } 24 25 //逆序栈 26 void reverse(SqStack *stack) 27 { 28 if(EmptyStack(*stack)) 29 { 30 return ; 31 } 32 int i = getAndRemoveLastElement(stack); //获取栈底元素并将其从栈中删除 33 reverse(stack); //递归调用reverse,此时的栈是被删除了栈底元素的栈 34 Push(stack, i); //待栈为空,则将获得的栈底元素压入栈中 35 }
以上是关于1.3 仅用递归函数和栈操作逆序一个栈的主要内容,如果未能解决你的问题,请参考以下文章