日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/5/22 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何仅用递归函数和栈操作逆序一个栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【題目】?

? ? ? ?一個棧依次壓入1、2、3、4、5,那么從棧頂到棧底分別為5、4、3、2、1。將這個棧轉置后,從棧頂到棧底為1、2、3、4、5,也就是實現棧中元素的逆序,但是只能用遞歸函數來實現,不能用其他的數據結構。

【解答】

? ? ? ? ?首先分為兩步。第一步,得到棧底元素并移除這個棧底元素;第二步,將得到的棧底元素逆序入棧。

【代碼】

1 package cn.hl.p3; 2 3 import java.util.Stack; 4 5 /** 6 * title:一個棧依次壓入1、2、3、4、5, 7 * 那么從棧頂到棧底分別為5、4、3、2、1。 8 * 將這個棧轉置后,從棧頂到棧底為1、2、3、4、5, 9 * 也就是實現棧中元素的逆序,但是只能用遞歸函數來實現,不能用其他的數據結構。 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 //當遞歸到棧底元素時,將棧頂元素返回并賦值給變量last 30 int last = getAndRemoveLastElement(stack); 31 //遞歸結束。將除棧底元素的其他元素按原先順序依次入棧。 32 //此時的棧與原棧的區別是:棧底元素被移除 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 //遞歸結束。遞歸到棧空時,將得到的棧底元素依次(注意順序!!!)入棧。 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

【運行結果】

轉載于:https://www.cnblogs.com/zhzcode/p/9574375.html

總結

以上是生活随笔為你收集整理的如何仅用递归函数和栈操作逆序一个栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。