java数据结构的练习一:如何用Java来实现数组;
说起来数据结构大家肯定会想到,数组,队列,堆栈,链表,图,树等其他的,接下来会每天逐一对其进行学习和使用,以及个人所理解的情况给展示出来
什么是数组呢?
1.数组是相同数据类型的元素的集合。
2.数组中的各元素的存储是有先后顺序的,它们在内存中按照这个先后顺序连续存放在一起。
3.数组元素用整个数组的名字和它自己在数组中的顺序位置来表示。例如,a[0]表示名字为a的数组中的第一个元素,a[1]代表数组a的第二个元素,以此类推。
这里主要说明一下一位数组如何构造呢:接下来看代码:
其中要说明以下几点吧:
1.需要提前定义数组,和定义有效的长度,
对于数组的添加:其实是对每一个下标来赋值,同时把有效长度递增
对弈数组的查看:通过值来返回所在的位置,本质是,通过循环遍历每一个下标所对应的值如果相同暂停,这时所对应的下标就是循环遍历的i所以返回i就可以了
数组的查找:通过下标查找,直接返回所对应的下标的值
删除数据:通过循环遍历,删除哪一个下标则把后面的数据赋值给前面的,同时对其进行有效长度自减1,
数据的更新:通过指定下标和值就可以实现更新,
有序添加:先循环遍历判断其值是否与添加的值的大小,这里是添加的值小的情况下终止,执行把添加后面的元素往前推移
这里是最后一个元素赋值给前一个元素,同时把新加入的元素给赋值到下标i;元素总量+1;
二分查找:二分查找必须是有序的数组,通过输入要查找的值,返回对应的位置,主要是设置变量,每次必须是把数组给分割成两块,把中间的值与出入的值相比较,如果相等,则返回数据,如不等判断大小,如果大于所查找的值最大下标为中间下标-1,否则最小下标为中间的值+1,这然后把所有的分割的范围
package com.kaysanshi.testArray;
/***
* 构造一个属于自己的数组
* @author leoill
*@date 2019年4月23日
*/
public class TestArray {
private long[] arry;//定义一个数组
private int elements;//定义数据有效长度
public TestArray(){
arry=new long[50];//设置50长度
}
public TestArray(int maxsize){
arry=new long[maxsize];
}
/**
* 数组的数据的添加
*/
public void insert(long value){
arry[elements]=value;
elements++;
}
/**
* 显示数据
*/
public void display(){
System.out.println("[");
for(int i=0;i<arry.length;i++){
System.out.println(arry[i]+ " ");
}
System.out.println("]");
}
/**
* 根据值来返value
*/
public int search(long value){
int i;
for(i=0;i<elements;i++){
if (value==arry[i]) {
break;
}
}
if (i==elements) {
return -1;
}else{
return i;
}
}
/**
* 线性查找
* 查找数据根据索引查
*/
public long get(int index){
if (index >=elements || index <0) {
throw new ArrayIndexOutOfBoundsException();
}else{
return arry[index];
}
}
/**
* 删除数据
*/
public void delete(int index ){
if (index >=elements || index <0) {
throw new ArrayIndexOutOfBoundsException();
}else{
for(int i=0;i<elements;i++)
arry[index]=arry[index+1];
elements--;
}
}
/**
* 更新
* @param index
* @param newvalue
*/
public void update(int index, long newvalue){
if (index >=elements || index <0) {
throw new ArrayIndexOutOfBoundsException();
}else{
arry[index]=newvalue;
}
}
///
// 以下是有序数组的操作 ///
// //
// ///
//
/**
* 有序添加
* @param value
*/
public void sortinsert(long value){
int i;
for(i=0;i<elements;i++){
if (arry[i]>value) {
break;
}
}
for(int j=elements;j>i;j--){
arry[j]=arry[j-1];
}
arry[i]=value;
elements++;
}
/**
* 二分查找:前提是必须是有序的数组
* @return
*/
public int binarysearch(long value){
int middle=0;
int low=0;
int pow=elements;//最大下标
while(true){
middle=(pow+low)/2;
if (arry[middle] == value) {
return middle;
}else if (low >pow) {
return -1;
}else {
if (arry[middle]>value) {
pow =middle-1;
}else{
low =middle+1;
}
}
}
}
/***
* 测试
* @param args
*/
public static void main(String[] args){
}
}