1. 程式人生 > >1.3 僅用遞歸函數和棧操作逆序一個棧

1.3 僅用遞歸函數和棧操作逆序一個棧

pan tac 刪除 相關 tdi 壓入 rem stack pre

題目:一個棧依次壓入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 僅用遞歸函數和棧操作逆序一個棧