数据结构--数组

数组简要介绍

数组是一种线性排列的数据结构,并且数组的查询效率很高,而添加和删除的效率就较低。因为数组的数据是按照顺序存储在内存中连续的一段空间内的,所以我们可以通过数组下标来实现对数组中的数据访问。
例如int []arr=new int[20];这条语句在java中相当于在内存中分配一段连续的20倍整形变量大小的空间用来数组的存储,且数组下标从0开始,由于未指定初值,默认每个数组空间存储的都是0。

数组的增删改查实现

数组的增加

由于数组是顺序存储的,所以数组在放入数据时,只需要将数据放在当前数组数据的末尾,也就是left位置,实现方法如下:

	private int[]arr=new int[1000];
	private int left=0;//标记剩余数量,也代表要插入的位置,初始为0.
	
	public void add(int num) {
		arr[left]=num;
		left++;//插入后,left后移
	}

数组的数据删除

若要删除数组中数据的话,有两种情况,一种是依据数组下标进行删除,另一种是依据数组中某项数据全部删除。任何删除都存在数组中数据移动的情况,需要谨慎处理。

依据数组下标删除

首先判断所给数组下标是否已经超出当前存储数据的下标 ,有则发出警告信息,否则删除,从当前删除数据的位置,依次将数据前移一位,同时left也要减少一位。

public void delByIndex(int index) {
		if(index>=left) {
			System.out.println("没有要删除的数据");
		}else {
			for(int i=index;i<left-1;i++) {
				arr[i]=arr[i+1];
			}
			left--;
		}
	}

依据数值删除(两种删除思路)

一、人类正向思维思考问题,我们遇到要删除的数据就跳过它,将它后面的数据挪前,遍历整个数组,删除所有待删数据,遇到连续多个时,将它一次性跨越掉。

public void delByValue1(int value) {
		int move=0;
		for(int i=0;i<left;i++) {
			if(arr[i]==value) {
				move++;
				for(int j=i+1;j<left;j++) {
					if(arr[j]==value) {
						move++;
					}else {
						break;
					}
				}
			}
			for(int k=i;k<left-move;k++) {
			arr[k]=arr[k+move];
			}
			left=left-move;
			move=0;
			
		}
	}

在这里插入图片描述

二、逆向思维,找数组中不是目标值的数据,将他们整合起来成一个数组。

public void delByValue(int value) {
		int index=0;
		for(int i=0;i<left;i++) {
			if(arr[i]!=value) {
				arr[index++]=arr[i];
			}
		}
		left=index;	
	}

利用一个整形变量index,既可以用作数组下标,同时又记录了最后不包含删除目标值的left值,一举两得,方法最为简单且代码量少。

数组数据的查改

因为数组是顺序存储的,所以对于数据的查和改,只需要顺序遍历整个数组,检查是否有所需数据即可,这里不予代码实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值