索引查找Java实现
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实现的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- Java基础加强之集合篇(模块记忆、精要分析)
千里之行,始于足下.把别人的变成自己,再把自己的分享给别人,这也是一次提升的过程.本文的目的是以一篇文章从整体把握集合体系又不失一些细节上的实现,高手路过. 集合的作用与特点 Java是一门面向对象语 ...
- 【Java】Lucene检索引擎详解
基于Java的全文索引/检索引擎——Lucene Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能. L ...
- 大话数据结构(八)Java程序——双向链表的实现
线性链表--双向链表 双向链表定义: 双向链表(double linked list): 是在单表单的每个结点中,再设置一个指向前驱结点的指针域.因此,在双向链表中的结点都有两个指针域,一个指向前驱, ...
- 1、java基础回顾与加强
一. 基础回顾 1 集合 1.1 集合的类型与各自的特性 ---|Collection: 单列集合 ---|List: 有存储顺序, 可重复 ---|ArrayList: 数组实现, ...
- JAVA基础知识之练习题——集合
练习一: 创建一个Set集合,保存用户输入的数据 具体代码实现如下面代码中的testSet()方法. 知识点: Set集合的基本特征是元素不允许重复.HashSet不保存元素顺序,LinkedHash ...
- Android开发之Java必备基础
Android开发之Java必备基础 Java类型系统 Java语言基础数据类型有两种:对象和基本类型(Primitives).Java通过强制使用静态类型来确保类型安全,要求每个变量在使用之前必须先 ...
- 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作
Java栈和局部变量操作 Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关.栈操作包括把常量压入操作数栈.执行通用的栈操作.在操作数栈和局部变量之间往返传输值. 1常量入栈操 ...
- JDK的帧--java.util包装工具库
题词 JDK,Java Development Kit. 首先,我们必须认识到,,JDK但,但设置Java只有基础类库.它是Sun通过基础类库开发,这是唯一的.JDK书写总结的类库.从技术含量来说,还 ...
随机推荐
- Java集合----Set集合
Set集合 Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败. Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法 Ha ...
- Linux之MySQL
一:卸载旧版本 使用下面的命令检查是否安装有MySQL Server rpm -qa | grep mysql 有的话通过下面的命令来卸载掉 rpm -e mysql //普通删除模式 rpm -e ...
- vertical-align负值和margin-bottom负值的区别
先看一下vertical-align在W3C当中的值有哪一些: 可是它有数值这一说确实很少提起,我们来看这么一段代码: <!DOCTYPE html> <html lang=&quo ...
- php学习十三:其他关键字
在php中,其实不止在php中,在其他语言中我们也会常常接触到一些关键字,整理了一下php当中的一下关键字,可能有些不全,希望大家指出来,多多交流,一起进步. 1.final 特性:1.使用final ...
- 《C++ Primer Plus》15.5 类型转换运算符 学习笔记
C++相对C更严格地限制允许的类型转换,并添加4个类型转换运算符,是转换过程更规范:* dynamic_cast:* const_cast:* static_cast:* reinterpret_ca ...
- Django学习笔记 Django的工程目录
mysite├── manage.py 管理项目:包括数据库建立.服务器运行.测试……└── mysite ├── __init__.py ├── settings.py 配置文件:应用 ...
- IOS实例方法和类方法的区别
类方法和实例方法 实例方法是— 类开头是+ 实例方法是用实例对象访问,类方法的对象是类而不是实例,通常创建对象或者工具类. 在实例方法里,根据继承原理发送消息给self和super其实都是发送给s ...
- MUI Hbuilder设置模拟器运行APP项目
1 安装hbuilder和夜神模拟器 2 hbuilder 新建app项目 3 hbuilder:运行-> 设置web服务器->Hbuilder 第三方安卓模拟器端口:62001 4 运 ...
- Excel 2010 最熟悉的陌生功能:筛选器(将当前所选内容添加到筛选器)
使用excel2010版的同学,在进行筛选时,肯定都对这句话很熟悉:将当前所选内容添加到筛选器.但很多同学天天看到,却不知道什么是筛选器?它有什么作用. 其实,这里所指的筛选器就是储存筛选结果的一个虚 ...
- 项目中启动另外的一个app
NSMutableString *webViewContent = [[NSMutableStringalloc] init]; [webViewContent appendString:@" ...