线性结构(二)--数组

      1、将数组转换成面向对象的数组

      2、使用线性查找

      3、使用二分法查找

一、数组:

  

public class MyArray {
	//用于存储数据的数组
	private int[] elements;
	
	//实例对象时,创建数组
	public MyArray(){
		elements=new int[0];
	}
	
	//获取数组长度的方法
	public int size(){
		return elements.length;
	}
	
	//往数组的末尾添加一个元素
	public void add(int element){
		//创建一个新数组
		int[] newArr=new int[elements.length+1];
		//把原数组的元素赋值到新数组到
		for (int i = 0; i < elements.length; i++) {
			newArr[i]=elements[i];
		}
		//把添加的元素放入新数组中
		newArr[elements.length]=element;
		//使用新数组替换旧数组
		elements=newArr;
	}
	//打印所有元素到控制台
	public void show(){
		System.out.println(Arrays.toString(elements));
	}
	//删除数组中的元素
	public void delete(int index){
		if(index<0||index>elements.length-1){
			throw new RuntimeException("下标越界!!");
		}
		//创建新数组
		int[] newarr=new int[elements.length-1];
		for(int i=0;i<newarr.length;i++){
			if(i<index){
				newarr[i]=elements[i];
			}else{
				newarr[i]=elements[i+1];
			}
		  }
		elements=newarr;
		}
	//获取某个元素
	public int get(int index){
		return elements[index];
	}
	//指定位置插入元素
	public void insert(int index,int elemten){
		if(index<0||index>elements.length-1){
			throw new RuntimeException("插入下标越界");
		}
		int[] newarr=new int[elements.length+1];
		for(int i=0;i<elements.length;i++){
			if(i<index){
				newarr[i]=elements[i];
			}else{
				newarr[i+1]=elements[i];
			}
		}
		newarr[index]=elemten;
		elements=newarr;
	}
	//替换指定位置的元素
	public void set(int index,int element){
		if(index<0||index>elements.length-1){
			throw new RuntimeException();
		}
		elements[index]=element;
	}
	//线性查找
	public int search(int target){
		//遍历数组
		for(int i=0;i<elements.length;i++){
			if(elements[i]==target){
				return i;
			}
		}
		return -1;
	}
	//二分查找
	public int binarySearch(int target){
		//记录开始位置
		int begin=0;
		//记录结束位置
		int end=elements.length-1;
		//记录中间的位置
		int mid=(begin+end)/2;
		//循环查找
		while(true){
			//什么情况下没有这个元素?
			//开始位置在位数之后或或重合,没有这个元素
			if(begin>=end){
				return -1;
			}
			//判断中间这个元素是不是要查找的元素
			if(elements[mid]==target){
				return mid;
			//中间这个元素不是要查的元素
			}else{
				//判断中间这个元素是不是比目标元素更大
				if(elements[mid]>target){
					//结束位置调到中间位置
					end=mid-1;
				}else{
					//把开始的位置调到中间位置
					begin=mid+1;
				}
				//取出新的中间位置
				mid=(begin+end)/2;
			}
			
		}
	}
	
}
好好学习,天天向上。 努力工作,给自己的和家人一个满意的答案。。。。
原文地址:https://www.cnblogs.com/axu521/p/9958299.html