1.3 僅用遞歸函數和棧操作逆序一個棧
阿新 • • 發佈:2018-04-23
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 僅用遞歸函數和棧操作逆序一個棧