数据结构Java(一)实验六 查找方法的综合实现

实验六  查找方法的综合实现

一、实验目的

1.掌握查找算法及基本思想及实现的技术;能够根据实际问题特点的要求选择合理的查找方法;理解查找在数据处理中的重要性;

2.掌握顺序查找、折半查找、哈希查找等多种查找方法的算法及实现技术;了解它们各自的优缺点。

3.熟悉各种查找方法的适用范围和条件;掌握顺序查找、折半查找、哈希查找的基本思想及效率分析。

二、实验环境

⒈ 硬件:每个学生需配备计算机一台。操作系统: Windows;

⒉ 软件:DOS或Windows操作系统+ MYEPLIPS;

三、实验要求及实验内容

⒈ 建立一个顺序表,表中的每个数据元素是一个记录,其中的某个域用来存储关键字的值,按关键字的值分别进行顺序和折半查找。为分析排序方法的稳定性,关键字可用次关键字。查找的结果返回关键字和给定值相等的记录在表中的序号或者记录的值。

⒉ 建立一个哈希表,分别用线性探测和链式探测解决冲突方法。

程序实现:

1.顺序表类 SqlSearehClass.jara

class RecType {//顺序表的元素类型
    int key;//存放关键字,假设关键字为int类型
    String data;
    public RecType(int d){  //存放其他数据,假设为 String类型
        key=d; //构造方法
    }
}

public class SqListSearchClass {
    final int MAXN=100;
    RecType[] R;
    int n;
    public void CreateR(int[] a){
        R=new RecType[MAXN];
        for(int i=0;i<a.length;i++){
            R[i]=new RecType(a[i]);
        }
        n=a.length;
    }
    //输出顺序表
    public void Disp(){
        for(int i=0;i<n;i++){
            System.out.print(R[i].key+"  ");
        }
        System.out.println();//各种顺序表查找算法将在后面讨论

    }
    //顺序查找算法1
    public int SeqSearch1(int k) {
        int i=0;
        //从表头往后找
        while(i<n&&R[i].key!=k){
            i++;
        }
        if(i>=n){
            return -1;//未找到返回一1
        } else{
            return i;//找到后返回其序号 i
        }
    }
    //折半查找非递归算法
    public int BinSearch1(int k) {
        int low = 0, high = n - 1, mid;
        //当前区间非空时
        while (low <= high) {
            mid = (low + high) / 2;  //求查找区间的中间位置
            //查找成功返回其序号mid
            if (k == R[mid].key){
                return mid;
            }
            //继续在 R[low..mid-]]中查找
            if (k < R[mid].key){
                high = mid - 1;
            } else{//k>R[mid].key
                low = mid + 1;//继续在R[mid+1..high]中查找
            }
        }
        return-1;  //当前查找区间空时返回-1
    }
}

2、测试类 test.java 

import java.util.Scanner;

public class test {
    public static void main(String[]arg){
        int b[]={1,5,11,14,66 };
        SqListSearchClass xx=new SqListSearchClass();
        xx.CreateR(b);
        xx.Disp();
        System.out.println("请输入你想查询的数:");
        Scanner hh=new Scanner(System.in);
        int k=hh.nextInt();
        int j=xx.SeqSearch1(k);
        if (j!=-1){
            System.out.println("data "+k+"  is in location  " +j+" ");
        }else{
            System.out.println("serch was unsuccessful");
        }
        //binary search
        int c[]={11,22,33,44,55};
        xx.CreateR(c);
        xx.Disp();
        System.out.println("请输入你想查询的数:");
        Scanner mm=new Scanner(System.in);
        int m=hh.nextInt();
        int n=xx.BinSearch1(m);
        if (n!=-1){
            System.out.println("data "+m+"  is in location  "+n+" ");
        }else{
            System.out.println("serch was unsuccessful");
        }
    }
}

运行结果

测试

通过!

四、报告要求

1.报告要求用专门的实验报告纸书写,字迹清晰,格式规范。

2.报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验要求。

3.报告中应书写源程序,且源程序中要有注释。

4.报告中应包含运行结果及结果分析。如调试通过,请注明‘通过’并写出输入的数据及运行结果;如未调试通过或结果不正确,试分析原因。

5.报告最后包含实验总结和体会。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孙同学1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值