数据结构--汉诺塔--借助栈实现非递归---Java
生活随笔
收集整理的這篇文章主要介紹了
数据结构--汉诺塔--借助栈实现非递归---Java
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1 /*漢諾塔非遞歸實現(xiàn)--利用棧
2 * 1.創(chuàng)建一個棧,棧中每個元素包含的信息:盤子編號,3個塔座的變量
3 * 2.先進棧,在利用循環(huán)判斷是否???#xff0c;
4 * 3.非空情況下,出棧,檢查是否只有一個盤子--直接移動,否則就模擬前面遞歸的情況--非1的情況
5 * 4.直到??站徒Y束循環(huán),就完成全部的移動。
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 }
執(zhí)行結果:
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: webstorm最新版破解教程及汉化教程
- 下一篇: RestFul是啥