如何仅用递归函数和栈操作逆序一个栈
生活随笔
收集整理的這篇文章主要介紹了
如何仅用递归函数和栈操作逆序一个栈
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
【題目】?
? ? ? ?一個棧依次壓入1、2、3、4、5,那么從棧頂?shù)綏5追謩e為5、4、3、2、1。將這個棧轉(zhuǎn)置后,從棧頂?shù)綏5诪?、2、3、4、5,也就是實現(xiàn)棧中元素的逆序,但是只能用遞歸函數(shù)來實現(xiàn),不能用其他的數(shù)據(jù)結(jié)構(gòu)。
【解答】
? ? ? ? ?首先分為兩步。第一步,得到棧底元素并移除這個棧底元素;第二步,將得到的棧底元素逆序入棧。
【代碼】
1 package cn.hl.p3; 2 3 import java.util.Stack; 4 5 /** 6 * title:一個棧依次壓入1、2、3、4、5, 7 * 那么從棧頂?shù)綏5追謩e為5、4、3、2、1。 8 * 將這個棧轉(zhuǎn)置后,從棧頂?shù)綏5诪?、2、3、4、5, 9 * 也就是實現(xiàn)棧中元素的逆序,但是只能用遞歸函數(shù)來實現(xiàn),不能用其他的數(shù)據(jù)結(jié)構(gòu)。 10 * 11 * @author 猩生柯北 12 */ 13 14 public class suanfa { 15 /** 16 * 將棧stack的棧底元素返回并移除 17 * @param stack 18 * @return 19 */ 20 public static int getAndRemoveLastElement(Stack<Integer> stack){ 21 //彈出棧頂元素 22 int result = stack.pop(); 23 //判斷 24 //彈出元素后如果棧為空,則返回該元素 25 if(stack.isEmpty()){ 26 return result; 27 }else{ 28 //不為空時,則遞歸。此時棧為原棧彈出棧頂元素后的一個變化的棧。 29 //當(dāng)遞歸到棧底元素時,將棧頂元素返回并賦值給變量last 30 int last = getAndRemoveLastElement(stack); 31 //遞歸結(jié)束。將除棧底元素的其他元素按原先順序依次入棧。 32 //此時的棧與原棧的區(qū)別是:棧底元素被移除 33 stack.push(result); 34 //返回原棧底元素 35 return last; 36 } 37 } 38 39 /** 40 * 逆序一個棧。 41 * @param stack 42 */ 43 public static void reverse(Stack<Integer> stack){ 44 //判斷。 45 if(stack.isEmpty()){ 46 return; 47 } 48 //得到棧底元素 49 int i = getAndRemoveLastElement(stack); 50 //遞歸。此時的棧是原棧返回并移除棧底元素的一個變化棧。 51 reverse(stack); 52 //遞歸結(jié)束。遞歸到棧空時,將得到的棧底元素依次(注意順序!!!)入棧。 53 stack.push(i); 54 } 55 56 //測試.入棧元素依次為:5,7,9. 57 public static void main(String[] args) { 58 Stack s1 = new Stack(); 59 s1.push(5); 60 s1.push(7); 61 s1.push(9); 62 System.out.println("The elements in the original stack:"); 63 for( int i=0 ; i <= s1.size()+1; i++ ){ 64 System.out.println(s1.pop()); 65 } 66 67 s1.push(5); 68 s1.push(7); 69 s1.push(9); 70 reverse(s1); 71 System.out.println("==================================="); 72 System.out.println("The elements in the changed stack:"); 73 for( int i=0 ; i <= s1.size()+1; i++ ){ 74 System.out.println(s1.pop()); 75 } 76 } 77 } 78【運行結(jié)果】
轉(zhuǎn)載于:https://www.cnblogs.com/zhzcode/p/9574375.html
總結(jié)
以上是生活随笔為你收集整理的如何仅用递归函数和栈操作逆序一个栈的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C++ Primer plus 第12章
- 下一篇: 什么是物联网的边缘计算?