java数据结构折半查找和二叉排序树

本文介绍了如何使用Java实现折半查找和二叉排序树的相关实验,包括查找、插入和删除操作。实验目的是掌握查找算法,理解二叉排序树特点。内容涉及了关键字序列的查找,二叉排序树的构造、插入13和删除24、53等操作,以及对应的源代码和运行结果展示。
摘要由CSDN通过智能技术生成

文中内容来源于《数据结构 --Java语言描述》(第二版) 刘小晶 杜选 主编
此系列文章作为学校实验记录,若文中内容有误,请大家指出,谢谢

一、实验目的

1、掌握查找的特点。
2、掌握折半查找的基本思想及其算法。
3、熟悉二叉排序树的特点,掌握二叉排序树的插入、删除操作。

二、实验内容

1、设有关键字序列k={ 5 ,14 ,18 ,21 ,23 ,29 ,31 ,35 },查找key=21和key=25的数据元素。
2、根据关键字序列{45、24、53、12、37、93}构造二叉排序树,并完成插入13删除关键字53和24的操作。

三、实验步骤

1、折半查找
(1)从键盘输入上述8个整数5 ,14 ,18 ,21 ,23 ,29 ,31 ,35,存放在数组bub[8]中,并输出其值。
(2)从键盘输入21,查找是否存在该数据元素,若存在,则输出该数据元素在表中的位置,否则给出查找失败的信息。
(3)从键盘输入25,查找是否存在该数据元素,若存在,则输出该数据元素在表中位置,否则给出查找失败的信息。
2、二叉排序树
(1)二叉排序树存储定义
(2)从键盘上输入六个整数45、24、53、12、37、9构造二叉排序树
(3)输出其中序遍历结果。
(4)插入数据元素13,输出其中序遍历结果。
(5)删除数据元素24和53,输出其中序遍历结果。

源代码

//顺序表记录结点类
package ch7;
public class ElementType {
   
    public Object data;

    public ElementType(Object data) {
   
        this.data = data;
    }
    public ElementType() {
   
    }
    public String toString() {
   
        return (String)data;
    }
}


//顺序表记录关键字类
package ch7;
public class KeyType implements Comparable<KeyType> {
   
    public int key;
    public KeyType() {
   

    }
    public KeyType(int key) {
   
        this.key = key;
    }
    public String toString() {
   
        return key + "";
    }
    //覆盖Comparable接口中比较关键字大小的方法
    public int compareTo(KeyType another) {
   
        int thisVal = this.key;
        int anotherVal = another.key;
        if(thisVal<anotherVal) {
   
            return -1;
        } else {
   
            if(thisVal == anotherVal) {
   
                return 0;
            } else {
   
                return 1;
            }
        }
    }
}


//待排序的顺序表记录类
package ch7;
public class RecordNode {
   
    public Comparable key;
    public Object element;
    public RecordNode(Comparable key) {
   
        this.key = key;
    }
    public RecordNode(Comparable key,Object element) {
   
        this.key = key;
        this.element = element;
    }
    public String toString() {
   
        return "[" + key + "]";
    }
}


//待排序的顺序表类
package ch7;
import java.util.Scanner;
public class SeqList {
   
    public RecordNode[] r;//顺序表记录结点数组
    public int curlen;//顺序表长度,即记录个数
    //顺序表的构造方法,构造一个存储空间容量为maxSize的顺序表
    public SeqList(int maxSize) {
   
        this.r = new RecordNode[maxSize];
        this.curlen = 0;
    }
    //在当前顺序表的第i个结点之前插入一个RecordNode类型的结点x
    public void insert(int i,RecordNode x) throws Exception{
   
        if(curlen == r.length) {
   
            throw new Exception("顺序表已满!");
        }
        if(i<0 || i>curlen) {
   
            throw new Exception("插入位置不合法!");
        }
        for (int j = curlen; j > i; j--) {
   
            r[j] = r[j - 1];//插入位置及之后的数据元素后移
        }
        r[i] = x;//插入x
        this.curlen++;//表长度增1
    }
/*
二分查找的递归写法
public int binarySearchDG(int low,int high,Comparable key) {
    int mid;
    if(low<=high) {
        mid = low + high;
        if(r[mid].key.compareTo(key)>0) {
            return binarySearchDG(low,mid - 1,key);
        } else if(r[mid].key.compareTo(key)<0) {
            return binarySearchDG(mid + 1,high,key);
        } else {
            return mid;
        }
    }
    return -1;
}
*/

    public int binarySearch(Comparable key) {
   
        if(curlen>0) {
   
            int low = 0,high = curlen - 1;//查找范围上下界
            while(low<=high) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值