数据结构和算法(Java版)学习笔记之数组(二)

4 篇文章 0 订阅

关于数组的基础知识

----数组对于每一门编程语言来说都是重要的数据结构之一,用来存储固定大小的同类型元素,对数组的操作主要是查找,赋值,增加、删除,不同语言对数组的实现及处理也不尽相同,这里用不同的方法实现对数组的查找,赋值,增加、删除

  • 数组的查找:线性查找和二分查找,下一篇文章给出;
  • 数组赋值增加:先判断是否达到数组最大长度,若小于最大长度,则直接在最后添加数据;
  • 数组删除:1、根据下标x:直接找到x所在位置,将x+1的值附给x,之后一次类推往前移动一个位置,最后将数组长度减一;2、根据数据值:将数组的每个数据与要删除的数据对比,找到后和根据下标x删除一样,将后面的向前移动一个,并将数组长度减一;
  • 一下例子以long类型的数组为例,此外还可定义int、string等类型的数组。

1.老式面向过程的数组


package arrayapplication;

public class ArrayApplication {
    public static void main(String[] args) {
       long[] arr;						//声明数组
       arr = new long[100];		//创建数组
       int nElems = 0;				//数组的个数
       int j = 0;						//循环变量
       long searchKey = 0;		//查找和删除的元素
       
       //对数组进行赋值
       arr[0] = 90;
       arr[1] = 91;
       arr[2] = 92;
       arr[3] = 93;
       arr[4] = 94;
       arr[5] = 95;
       arr[6] = 96;
       arr[7] = 97;
       arr[8] = 98;
       arr[9] = 99;
       nElems = 10;
       
       //显示所有元素
       for(j =0;j<nElems;j++){
           System.out.print(arr[j]+" ");
       }
        System.out.println();
        
       //查找99
       searchKey = 89;
       for(j = 0; j<nElems;j++)
           if(arr[j]==searchKey) break;
       if(j==nElems)
           System.out.println("Can't Found:"+searchKey);
       else
           System.out.println("Found:"+searchKey);
       
       //删除98
       searchKey = 98;
       for(j = 0; j<nElems;j++)
           if(arr[j]==searchKey) break;
       if(j==nElems)
           System.out.println("Can't Found:"+searchKey);
       else{
           for(int k = j; k<nElems;k++)
               arr[k]=arr[k+1];
           nElems--;
       }
       
       //显示所有元素
       for(j =0;j<nElems;j++){
           System.out.print(arr[j]+" ");
       }      
    }
}

2.面向对象简单数组

创建一个LowArray数组类,对其功能进行封装(这里仅仅简单封装了增加和查找功能):

package arrayapplication;

public class LowArray {
    private long[] arr;					//声明数组
    public LowArray(int size){
        arr = new long[size];		//对数组进行初始化
    }
    //将数据存入数组
    public void setElems(int index, long value){
        arr[index] = value;
    }
    
    //根据下标获取数组
    public long getElems(int index){
        return arr[index];
    }
}

创建一个入口类对上个类的功能进行实现:


package arrayapplication;

public class LowArrayApp {
    public static void main(String[] args){
     	int nElems = 10;       							//数组大小
        LowArray arr = new LowArray(nElems );		//创建LowArray的实例
        int j = 0;												//循环变量									
        long searchKey = 0;							//查找、删除的数据
        
        //对数组赋值setElems(index, value)
        arr.setElems(0, 90);
        arr.setElems(1, 91);
        arr.setElems(2, 92);
        arr.setElems(3, 93);
        arr.setElems(4, 94);
        arr.setElems(5, 95);
        arr.setElems(6, 96);
        arr.setElems(7, 97);
        arr.setElems(8, 98);
        arr.setElems(9, 99);
        
        //显示所有
        for(j=0; j<nElems;j++)
            System.out.print(arr.getElems(j)+" ");
        System.out.println();
        
        //查找
        searchKey = 98;
       for(j = 0; j<nElems;j++)
           if(arr.getElems(j) == searchKey) break;
       if(j==nElems)
           System.out.println("Can't Found:"+searchKey);
       else
           System.out.println("Found:"+searchKey);
       
       //删除
       searchKey = 98;
       for(j = 0; j<nElems;j++)
           if(arr.getElems(j) == searchKey) break;
       if(j==nElems)
           System.out.println("Can't Found:"+searchKey);
       else{
           for(int k = j; k<nElems;k++)
               arr.setElems(k, arr.getElems(k));
           nElems--;
       }
       
         //显示所有
        for(j=0; j<nElems;j++)
            System.out.print(arr.getElems(j)+" ");
        System.out.println();
    }
}

3.面向对象功能复杂数组
创建一个HighArray类,对数组功能进行封装:

package arrayapplication;

public class HighArray {
    private long[] arr;			//声明数组
    private int nElems;		//数组大小
    private int j;					//循环变量
    public HighArray(int max){
        arr = new long[max];	//实例化数组
        nElems = 0;					
    }
    
    //查找功能
    public boolean find(long searchKey){
        for(j = 0; j<nElems;j++)
           if(arr[j] == searchKey) break;
       if(j==nElems)
           return false;
       else
           return true;
    }
    //插入功能
    public void insert(long value){
        arr[nElems] = value;
        nElems++;
    }
    
    //删除功能
    public boolean delete(long searchKey){
        for(j = 0; j<nElems;j++)
           if(arr[j] == searchKey) break;
       if(j==nElems)
           return false;
       else{
           for(int k = j; k<nElems;k++)
               arr[k] = arr[k+1];
           nElems--;
       }
       return true;
    }
    
    //显示所有
    public void display(){
        for(j=0; j<nElems;j++)
            System.out.print(arr[j]+" ");
        System.out.println();
    }
}

下一篇文章记录数组的查找方法(线性查找和二分查找)和有序数组。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值