数据结构与算法——java实现数组

1 篇文章 0 订阅
1 篇文章 0 订阅

数据结构——数组

什么是数组?

数组对应的英文是array,是有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素,数组是最为简单,最为常用的数据结构。

数组的每一个元素都有一个下标,只不过这个下标从0开始,一直到数组的长度减1
在这里插入图片描述
另外,数组在内存中是顺序存储,也叫作顺序表
在这里插入图片描述
如上图,绿色的格子代表空闲的储存单元,灰色的代表的是已占用的储存单元,白色的代表的是连续储存的数组元素。

数组的每一个元素中,都是存储在一个小小的内存单元中,并且元素之间都是紧密排列在一起的,既不能打乱元素的储存顺序,也不能跳过每个储存单元进行储存。

数据结构的基本操作无非是

下面来看看增的操作——使用java语言实现

增加操作

	/*
	 *	数組插入元素
	 *	 
	 */
	public void insert(int index, int element) throws IndexOutOfBoundsException {
		//判断下标是否超出范围
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		//从右向左循环,将元素逐个向右挪一位
		for(int i=size-1; i>=index; i--) {
			array[i+1] = array[i];
		}
		//腾出的位置放入新元素
		array[index] = element;
		size++;
	}

删除操作

/**
	 * 根据下标删除数组元素 
	 */
	public int delete(int index) throws IndexOutOfBoundsException {
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		int deleteelement = array[index];
		//向左向右循环,将元素逐个向左挪1个
		for(int i=index; i<size-1; i++) {
			array[i] = array[i+1];
		}
		size--;
		return deleteelement;
	}

修改操作

	/*
	 * 根据下标修改数组元素
	 */
	public void alterelement(int index, int element) throws IndexOutOfBoundsException{
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		array[index] = element;
	}

查找操作

	/*
	 * 根据下标查找数组元素
	 */
	public int seek(int index) throws IndexOutOfBoundsException{
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		return array[index];
	}

万一数组的空间用完需要扩容呢?
这里在添加一个扩容的操作

	/*
	 * 数组的扩容
	 */
	public void resize() {
		int[] newarray = new int[array.length+array.length/2]; //增加当前的元素长度的一半
		System.arraycopy(array, 0, newarray, 0, array.length);
		array = newarray;
	}

返回数组的长度和输出数组的元素

	/**
	 * 
	 * @return 返回当前数组的元素个数
	 */
	public String size() {
		return "当前元素长度为:"+array.length;
	}
	
	//输出元素
	public void Output() {
		for(int i=0; i<size; i++) {
			System.out.print(array[i]+" ");
		}
	}

完整代码

public class TestArray01 {
	private int[] array;
	private int size;
	public TestArray01(int capacity) {
		this.array = new int[capacity];
		this.size = 0;
	}
	
	/*
	 *	数組插入元素
	 *	 
	 */
	public void insert(int index, int element) throws IndexOutOfBoundsException {
		//判断下标是否超出范围
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		//从右向左循环,将元素逐个向右挪一位
		for(int i=size-1; i>=index; i--) {
			array[i+1] = array[i];
		}
		//腾出的位置放入新元素
		array[index] = element;
		size++;
	}
	/**
	 * 根据下标删除数组元素 
	 */
	public int delete(int index) throws IndexOutOfBoundsException {
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		int deleteelement = array[index];
		//向左向右循环,将元素逐个向左挪1个
		for(int i=index; i<size-1; i++) {
			array[i] = array[i+1];
		}
		size--;
		return deleteelement;
	}
	
	/*
	 * 根据下标修改数组元素
	 */
	public void alterelement(int index, int element) throws IndexOutOfBoundsException{
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		array[index] = element;
	}
	
	/*
	 * 根据下标查找数组元素
	 */
	public int seek(int index) throws IndexOutOfBoundsException{
		if(index<0 || index>size) {
			throw new IndexOutOfBoundsException("下标超出范围");
		}
		return array[index];
	}
	/*
	 * 数组的扩容
	 */
	public void resize() {
		int[] newarray = new int[array.length+array.length/2]; //增加当前的元素长度的一半
		System.arraycopy(array, 0, newarray, 0, array.length);
		array = newarray;
	}
	
	/**
	 * 
	 * @return 返回当前数组的元素个数
	 */
	public String size() {
		return "当前元素长度为:"+array.length;
	}
	
	//输出元素
	public void Output() {
		for(int i=0; i<size; i++) {
			System.out.print(array[i]+" ");
		}
	}
	
	public static void main(String[] args) throws Exception {
		TestArray01 array = new TestArray01(10);
		array.insert(0, 4);
		array.insert(1, 6);
		array.insert(2, 9);
		array.insert(3, 1);
		array.insert(4, 3);
		array.insert(5, 5);
		array.insert(6, 8);
		array.insert(7, 2);
		array.Output();
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值