欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA数据结构之汉诺塔代码实例

程序员文章站 2024-02-23 13:23:28
本文实例为大家分享了java数据结构之汉诺塔的具体代码,供大家参考,具体内容如下 package p02.动态链表; import p01.动态数组.s...

本文实例为大家分享了java数据结构之汉诺塔的具体代码,供大家参考,具体内容如下

package p02.动态链表;

import p01.动态数组.stack;

public class linkedstack<e> implements stack<e> {
	private linkedlist<e> list;
	public linkedstack(){
		list=new linkedlist<>();
	}
	@override
	public void push(e e) {
		// todo 自动生成的方法存根
		list.addfrist(e);
	}
	@override
	public e pop() {
		// todo 自动生成的方法存根
		return list.removefrist();
	}
	@override
	public boolean isempty() {
		// todo 自动生成的方法存根
		return list.isempty();
	}
	@override
	public e peek() {
		// todo 自动生成的方法存根
		return list.getfrist();
	}
	@override
	public int getsize() {
		// todo 自动生成的方法存根
		return list.getsize();
	}
	@override
	public void clear() {
		// todo 自动生成的方法存根
		list.clear();
	}
	@override
	public string tostring() {
		// todo 自动生成的方法存根
		return list.tostring();
	}
	
}

//用前边实现的链栈去实现汉诺塔
package p03.递归;

import p02.动态链表.linkedstack;

public class hano {
	public static void main(string[] args) {
		
//		string x = "x";	//原始盘
//		string y = "y";	//借助盘
//		string z = "z";	//最终盘
//		move(x,y,z,n);
		int n=10;
		linkedstack<integer> stackx=new linkedstack();
		for(int i=n;i>=1;i--){
			stackx.push(i);
		}
		linkedstack<integer> stacky=new linkedstack();
		linkedstack<integer> stackz=new linkedstack();
		
		move(stackx,stacky,stackz,n);
		
		system.out.println(stackx);
		system.out.println(stackz);

	}
	//定义三个栈,实现其移动
	public static void move(linkedstack<integer> x,linkedstack<integer> y, linkedstack<integer> z, int level) {
		
		if(level==1){
			z.push(x.pop());
		}else{
			move(x,z,y,level-1);
			z.push(x.pop());
			move(y,x,z,level-1);
		}
		
	}
	//只打印移动过程。
	/*public static void move(string x, string y, string z, int level) {
		if(level==1){
			system.out.println(x+"->"+z);
			return;
		}
		move(x,z,y,level-1);
		system.out.println(x+"->"+z);
		move(y,x,z,level-1);
		
	}*/

}

以上所述是小编给大家介绍的java数据结构之汉诺塔详解整合,希望对大家有所帮助