数据结构@IT·互联网首页投稿(暂停使用,暂停投稿)

3.栈与栈的实例——汉诺塔

2016-08-06  本文已影响204人  KaelQ

1.栈

First In Last Out,顺序栈和链栈,六种方法,声明使用方式。

1.1 概论

1.2 顺序栈和链栈

1.3 六种基本方法

1.4 声明使用方式

1.4.1 栈

#include<stack>
stack<int> stk;
s.empty()如果栈为空返回true,否则返回false
s.size()返回栈中元素的个数
s.pop()删除栈顶元素但不返回其值
s.top()返回栈顶的元素,但不删除该元素
s.push()在栈顶压入新元素
importjava.util.Stack;
Stack stack = new Stack(); // 创建堆栈对象
stack.push(数据)        在栈顶压入新元素
stack.pop()              删除栈顶元素并且返回其值
stack.empty()           如果栈为空返回true,否则返回false
stack.peek()             返回栈顶的元素,但不删除该元素
stack.search()          查找stack里的元素,返回元素到栈顶的距离。

2.汉诺塔问题

public class HanoiRecursion {
    public static void main(String[] args){
        hanoi(4,'A','B','C');
    }
    public static void hanoi(int n,char A,char B,char C){
        if(n==1){
            move(A,C);
        }
        else{
            hanoi(n-1,A,C,B);
            move(A,C);
            hanoi(n-1,B,A,C);
        }
    }
    public static void move(char A,char C){
        System.out.println(A+"->"+C);
    }
}
public class HanoiStack {
    public static void main(String[] args) {
        Stack hanoi = new Stack();
        hanoi.push(new Problem(4, 'A', 'B', 'C'));
        Problem myProblem = null;
        while (!hanoi.isEmpty() && (myProblem = (Problem) hanoi.pop()) != null) {
            if (myProblem.n == 1) {
                System.out.println(myProblem.A+"->"+myProblem.C);
            } else {
                hanoi.push(new Problem(myProblem.n-1, myProblem.B, myProblem.A, myProblem.C));
                hanoi.push(new Problem(1, myProblem.A, myProblem.B, myProblem.C));
                hanoi.push(new Problem(myProblem.n-1, myProblem.A, myProblem.C, myProblem.B));
            }
        }
    }
}
class Problem {
    int n;
    char A, B, C;
    public Problem(int n, char A, char B, char C) {
        this.n = n;
        this.A = A;
        this.B = B;
        this.C = C;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读