java怎么写ADT

一个ADT是一个仅由保存的数据类型和可能在这个数据类型上进行的操作定义的。开发者们只能通过ADT的操作方法来访问ADT的属性,而且他们不会知道这个数据类型内部各种操作是如何实现的。

抽象数据类型

public class ADTtest <L>{
    public L name;
    public ADTtest(L g){
        name = g;
    }//构造方法
    @Override
    public String toString(){
        return name.toString();
    }//toString函数
}

上面的代码定义了一个类ADTtest<L>我们声明一个ADTtest对象的时候只需要如下图

ADTtest<Integer> g = new ADTtest(25);
System.out.println(g.toString());

这样声明一个ADTtest类型,中间的Integer可以换成任意对象类型

/**
 * 无论排序的对象是什么,都要实现Comparable接口
 *
 * @param <T>
 */
public class BinaryNode<T extends Comparable<T>> {
    private static int index = 0; // 排序下标
    private static int len = 0; // 最大数组长度
    private T t; // 根节点
    private BinaryNode<T> left; // 左侧叶子节点
    private BinaryNode<T> right; // 右侧叶子节点

    public BinaryNode(T t) {
        len++;
        this.t = t;
    }

    /**
     * 往一颗树中插入值,在本质上都通过根节点一层层的判断。
     * 如果根节点不存在则新建节点
     * 如果根节点存在则判断应该在左侧还是在右侧插入,通常是左小右大
     * 
     * @param t
     */
    public void insert(T t) {
        if (this.t.compareTo(t) > 0) {
            if (this.left == null) {
                BinaryNode<T> node = new BinaryNode<T>(t);
                this.left = node;
            } else {
                this.left.insert(t);
            }
        } else {
            if (this.right == null) {
                BinaryNode<T> node = new BinaryNode<T>(t);
                this.right = node;
            } else {
                this.right.insert(t);
            }
        }
    }

    /**
     * 调用私有方法
     * 
     * @return
     */
    public Comparable<?>[] order() {
        Comparable<?>[] os = new Comparable[len];
        order(this, os);
        return os;
    }

    /**
     * 利用中序遍历查找整颗树
     * 
     * @param bn
     * @param os
     */
    private void order(BinaryNode<T> bn, Comparable<?>[] os) {
        if (bn.left == null) {
            os[index++] = bn.t;
        } else {
            order(bn.left, os);
            os[index++] = bn.t;
        }
        if (bn.right == null) {
            return;
        } else {
            order(bn.right, os);
        }
    }

}

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值