码迷,mamicode.com
首页 > 其他好文 > 详细

1.3 仅用递归函数和栈操作逆序一个栈

时间:2018-04-23 20:27:47      阅读:157      评论:0      收藏:0      [点我收藏+]

标签:文件包含   std   题目   stack   pre   col   包含   ret   相关   

题目:一个栈依次压入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 仅用递归函数和栈操作逆序一个栈

标签:文件包含   std   题目   stack   pre   col   包含   ret   相关   

原文地址:https://www.cnblogs.com/latup/p/8921497.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!