zoukankan      html  css  js  c++  java
  • 线性结构(二)--数组

          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;
    			}
    			
    		}
    	}
    	
    }
    
    好好学习,天天向上。 努力工作,给自己的和家人一个满意的答案。。。。
  • 相关阅读:
    最长回文子串
    无题2
    第N个泰波那契数
    除数博弈
    函数调用_强制指定回调函数的函数上下文
    函数调用_通过apply和call方法调用
    函数调用_通过构造函数调用
    理解函数调用_函数调用
    处理集合_删除数组元素的粗略方法
    理解函数调用_使用严格模式边使用arguments别名
  • 原文地址:https://www.cnblogs.com/axu521/p/9958299.html
Copyright © 2011-2022 走看看