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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

数据结构--汉诺塔--借助栈实现非递归---Java

發布時間:2025/3/15 java 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构--汉诺塔--借助栈实现非递归---Java 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 /*漢諾塔非遞歸實現--利用棧 2 * 1.創建一個棧,棧中每個元素包含的信息:盤子編號,3個塔座的變量 3 * 2.先進棧,在利用循環判斷是否棧空, 4 * 3.非空情況下,出棧,檢查是否只有一個盤子--直接移動,否則就模擬前面遞歸的情況--非1的情況 5 * 4.直到??站徒Y束循環,就完成全部的移動。 6 * */ 7 class Stack11{ 8 Towers[] tt = new Towers[20]; 9 int top = -1; 10 11 public boolean isEmpty(){ 12 return top == -1; 13 } 14 15 public void push(Towers t){ 16 tt[++top] = t; 17 } 18 19 public Towers pop(){ 20 return tt[top--]; 21 } 22 } 23 24 class Towers{ 25 int diskN; 26 char from; 27 char inter; 28 char to; 29 public Towers(int diskN, char from, char inter, char to) { 30 this.diskN = diskN; 31 this.from = from; 32 this.inter = inter; 33 this.to = to; 34 } 35 36 } 37 38 public class HannoTower_Stack { 39 40 public static void main(String[] args) { 41 Towers t1 = new Towers(3,'A','B','C'); 42 doTowers(t1); 43 } 44 45 private static void doTowers(Towers t1) { 46 Stack11 stack = new Stack11(); 47 stack.push(t1); 48 while(!stack.isEmpty()){ 49 Towers temp = stack.pop(); 50 //處理是一個盤子的情況--所有打印語句都從這里打印 51 if(temp.diskN == 1){ 52 System.out.println("Top disk " + "from " + temp.from + " to " + temp.to); 53 } 54 //注意處理移動的順序本來是A-C-B,A-B-C,B-A-C.所以進棧的順序相反 55 else{ 56 stack.push(new Towers(temp.diskN-1,temp.inter,temp.from,temp.to)); 57 stack.push(new Towers(1,temp.from,temp.inter,temp.to)); 58 stack.push(new Towers(temp.diskN-1,temp.from,temp.to,temp.inter)); 59 } 60 } 61 62 } 63 64 }

執行結果:

Top disk from A to C
Top disk from A to B
Top disk from C to B
Top disk from A to C
Top disk from B to A
Top disk from B to C
Top disk from A to C

轉載于:https://www.cnblogs.com/sun1993/p/7811492.html

總結

以上是生活随笔為你收集整理的数据结构--汉诺塔--借助栈实现非递归---Java的全部內容,希望文章能夠幫你解決所遇到的問題。

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