索引查找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书写总结的类库.从技术含量来说,还 ...
随机推荐
- opencv-从图像旋转学习Mat数据訪问
先看一个简单的样例 代码: // ConsoleApplication3_6_23.cpp : Defines the entry point for the console application. ...
- easyui------dialog如何固定位置
转载: http://blog.csdn.net/dhdhdh0920/article/details/7438272 代var default_left; var default_top; $('# ...
- UVA 1341 - Different Digits(数论)
UVA 1341 - Different Digits 题目链接 题意:给定一个正整数n.求一个kn使得kn上用的数字最少.假设同样,则输出值最小的 思路: 首先利用鸽笼原理证明最多须要2个数字去组成 ...
- Int 型数值存储
1. Int 在计算机中占 4 Byte, 共 32 位, 最大正数为 2147483647, 最小负数为 -2147483648 2. 正数存储在计算机中的形式为原码,最大正数的十六进制形式为 0X ...
- swift -- 计步器CMPedometer的使用
最近公司接了个项目,是一款运动类型的APP,可以检测运动量(例如:步数,上下楼等).睡眠信息.速度等信息,因为以前粗略的了解过传感器方面的相关信息,知道主要是苹果设备内置的传感器在起作用,传感器的种类 ...
- swift - UIPickerView 的使用
效果显示数下图: 1.初始化 pickerView.center = self.view.center //将dataSource设置成自己 pickerView.dataSource=self // ...
- SegmentedControl的使用
原文 http://blog.csdn.net/hmt20130412/article/details/38390493 @UISegmentedControl类似于UIButton,它可以提供多个选 ...
- Linux mii-tool 命令
mii-tool 用来查看或设置网卡的相关参数,该命令已经过时了,推荐使用 ethtool 命令 [root@localhost ~]$ mii-tool -v eth1 # 查看网卡的相关信息,包括 ...
- 一个php日志类
<?php //author:lixiuran class Log { public static function writeLog($string) { $string = date('H: ...
- ios错误大全
/读取数据库数据 -(void)movethesqlitefile{ NSString *sourcepath=[[NSBundle mainBundle]pathForResource:@" ...