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 }

猜你喜欢

转载自www.cnblogs.com/latup/p/8921497.html
1.3