package 索引查找;

import java.util.Scanner;

public class IndexSearch {

	public static long stu[] = {
1080101,1080102,1080103,1080104,1080105,1080106,0,0,0,0,
1080201,1080202,1080203,1080204,0,0,0,0,0,0,
1080301,1080302,1080303,1080304,0,0,0,0,0,0
}; static Item[]indexTable = {
new Item(10801,0,6),
new Item(10802,10,4),
new Item(10803,20,4)
}; public static int indexSearch(int key){
int i,index1,start = 0,length = 0;
index1 = key/100;
for (i = 0;i<indexTable.length;i++) {
if (indexTable[i].index == index1) {
start = indexTable[i].start;
length = indexTable[i].length;
break;
}
}
if (i >= indexTable.length) {
return -1;
}
for (i = start;i<start+length;i++) {
if (stu[i] == key) {
return i;
}
}
return -1;
} //向主表中插入元素,从stu这个数组中我们可以看出来里面有0的值,这些值就是预留的空间
/**
* 我们只需要把这些0的值替换掉就行了,值涉及到了索引表和相应的字表,而不是整个表
* 所以比较和移动的效率比较高
*/ public static int insertNode(int key){
int i,index1,start = 0,length = 0;
index1 = key/100;
for (i = 0;i<indexTable.length;i++) {
if (indexTable[i].index == index1) {
start = indexTable[i].start;
length = indexTable[i].length;
break;
}
}
if (i >= indexTable.length) {
return -1;
} //保存关键字到主表中
stu[start+length] = key;
indexTable[i].length++;
return 0;
} public static void main(String[] args) {
Scanner input = new Scanner(System.in); System.out.println("原始数据:");
for (int i = 0;i<stu.length;i++) {
System.out.print(stu[i]+" ");
}
System.out.println();
// System.out.println("输入查找的关键字");
// int key = input.nextInt();
// int pos = indexSearch(key);
// if (pos >= 0) {
// System.out.printf("查找成功,该关键字位于数组的第%d个位置\n",pos);
// }else{
// System.out.println("查找失败!");
// } System.out.println("输入插入的关键字");
int num = input.nextInt();
if (insertNode(num) == -1) {
System.out.println("插入失败!");
}else {
for (int i = 0;i<stu.length;i++) {
System.out.print(stu[i]+" ");
}
System.out.println();
} } }
package 索引查找; import java.util.Scanner; public class IndexSearch { public static long stu[] = { 1080101,1080102,1080103,1080104,1080105,1080106,0,0,0,0, 1080201,1080202,1080203,1080204,0,0,0,0,0,0, 1080301,1080302,1080303,1080304,0,0,0,0,0,0 }; static Item[]indexTable = { new Item(10801,0,6), new Item(10802,10,4), new Item(10803,20,4) }; public static int indexSearch(int key){ int i,index1,start = 0,length = 0; index1 = key/100; for (i = 0;i<indexTable.length;i++) { if (indexTable[i].index == index1) { start = indexTable[i].start; length = indexTable[i].length; break; } } if (i >= indexTable.length) { return -1; } for (i = start;i<start+length;i++) { if (stu[i] == key) { return i; } } return -1; } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("原始数据:"); for (int i = 0;i<stu.length;i++) { System.out.print(stu[i]+" "); } System.out.println(); System.out.println("输入查找的关键字"); int key = input.nextInt(); int pos = indexSearch(key); if (pos >= 0) { System.out.printf("查找成功,该关键字位于数组的第%d个位置\n",pos); }else{ System.out.println("查找失败!"); } } }

索引查找Java实现的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Java基础加强之集合篇(模块记忆、精要分析)

    千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...

  3. 【Java】Lucene检索引擎详解

    基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...

  4. 大话数据结构(八)Java程序——双向链表的实现

    线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...

  5. 1、java基础回顾与加强

    一.    基础回顾 1   集合 1.1  集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList:    数组实现, ...

  6. JAVA基础知识之练习题——集合

    练习一: 创建一个Set集合,保存用户输入的数据 具体代码实现如下面代码中的testSet()方法. 知识点: Set集合的基本特征是元素不允许重复.HashSet不保存元素顺序,LinkedHash ...

  7. Android开发之Java必备基础

    Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...

  8. 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作

    Java栈和局部变量操作 Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关.栈操作包括把常量压入操作数栈.执行通用的栈操作.在操作数栈和局部变量之间往返传输值. 1常量入栈操 ...

  9. JDK的帧--java.util包装工具库

    题词 JDK,Java Development Kit. 首先,我们必须认识到,,JDK但,但设置Java只有基础类库.它是Sun通过基础类库开发,这是唯一的.JDK书写总结的类库.从技术含量来说,还 ...

随机推荐

  1. Java------遍历Map<k,v>的方法

    1. public class MapAction extends ActionSupport{ private Map<String, User> map = new HashMap&l ...

  2. mybatis由浅入深day01_8.2resultMap

    8.2 resultMap mybatis中使用resultMap完成高级输出结果映射. resultType可以指定pojo将查询结果映射为pojo,但需要pojo的属性名和sql查询的列名一致方可 ...

  3. 如何把he_llo wo_rld 变成 HeLlo WoRld

    有人问如何把he_llo wo_rld 变成 HeLlo WoRld,估计应该是一道面试的基础题吧. 思路很多种,就看如何实现 思路一.先根据空格分隔,然后转大写,最后再拼接.代码如下 <?ph ...

  4. swift--控件工厂类的实现

    控件工厂类,简而言之就是,减少代码的复用率,只在哪里用,然后在哪里调: 代码如下: import UIKit class ViewFactory: UIView,UITextFieldDelegate ...

  5. python2.0_s12_day21_web聊天室一

    本节内容: 项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以 ...

  6. Vitamio与FFmpeg、LGPL、GPL的关系

    转自:http://sun.sanniang.me/2014/04/26/the-relationship-vitamio-with-ffmepg-lgp-gpl Vitamio 使用了 FFmpeg ...

  7. 64位ubuntu下用code::blocks IDE配置opengl开发环境

    http://jingyan.baidu.com/article/c74d60007d104f0f6b595d6d.html 样例程序: #include <GL/glut.h> #inc ...

  8. Python class的属性访问控制和内建函数重写实现高级功能以及@property

    一.类属性的访问控制 Python Class确实是博大精深,我们还是来温习一下属性的访问控制作为开(fu)场(xi). 首先_varname是可以访问的,__varname是不能直接访问(原理是__ ...

  9. 使用Eclipse(以及intellij IDEA)配合JDWP对服务器上部署的代码进行调试

    今天遇到了一个问题:同样的代码,在服务器上跑的时候会报空指针异常,但是在本地是没有问题的,看服务器上打印的日志只能看到异常信息,不能准确地定位到出问题的代码,于是就搜索了一下远程调试.结果还真的可以在 ...

  10. OneThink友情链接插件使用!

    OneThink友情链接插件使用: 直接安装插件就好,查看数据库会有:onethink_links 这个表: 写 links 标签,调用友情链接: <?php namespace Common\ ...