关闭

数据结构之数组的增删改查-java实现

标签: 数据结构数组算法javacsdn博客
1278人阅读 评论(0) 收藏 举报
分类:

数组的增删改查操作-java实现

    数组在数据结构中是一个永恒的话题,其作用在此就不再细说,如果有问题可以百度或者google搜索一大推,在这里我想采用java中面向对象的思想实现对数组的增删改查操作。

    这里有几点需要说明:

    1,java中的数组是一种静态的数据类型,数组的长度一经声明将不可再更改。但允许动态进行声明

    2,在实现数组的查询中,不同于网上或者传统的做法:只是找到数组中第一次出现的待查找数据。我本来也想做这样的事,但想想会很无趣,因为在C语言那会已经实现了多次,这次想换种新意!即:待查找的数据在数组中可能不止一次出现,本程序将实现查找出这些数据,即找出所有的待查找的数据。

    3,在执行删除与修改数据操作时候也是如此,待删除的数据在原数组中可能出现多次,既然是要删除待删除的数据,那就应当删除所有。修改也是同样的道理。

    下面是程序--原谅我直接上代码了,因为我还是倾向于"代码里见真知"。其中在代码中有做了说明。

package dataStructures.array;

/**
 * 数据结构--数组的基本操作
 * @author zhonglinsen
 *
 */
class ArrayModel {
	//声明一个数组array,以及数组的元素个数number
	private int[] array;
	private int number=0;
	
	//count:用于查询时候  遇到原先数组的个数有多个情况进行记录,设置了get set方法进行访问
	private int count=0;
	
	public void setCount(int c){
		this.count=c;
	}
	public int getCount(){
		return this.count;
	}
	
	//构造函数:设置数组的初始化元素个数
	public ArrayModel(int num){
		this.array = new int[num];
	}
	
	/**
	 * 插入数据
	 * @param value
	 */
	public void insertArray(int value){
		this.array[number]=value;
		number += 1;
	}
	
	/**
	 * 展示数组数据:其中注意数组的个数采用  成员变量number进行遍历
	 */
	public void displayArray(){
		System.out.print("数组元素为: ");
		for (int i = 0; i < number; i++) {
			System.out.print(this.array[i]+" ");
		}
		System.out.println();
	}
	
	/**
	 * 查询数据:因为查询到的数据可能有多个,故而这里采用了不同于传统做法(只认为存在一个数据或者只返回第一个数据),其中可以访问成员变量
	 * getCount()获取查询到的数据有多少个,而不是通过valueIndex.length来获取查询到的数据的个数
	 * @param value
	 * @return
	 */
	public int[] selectArray(int value){
		int index=0,num=0;
		int[] valueIndex=new int[this.number];
		for (int i = 0; i < number; i++) {
			if (this.array[i]==value) {
				index=i+1;
				//在此valueIndex数组存放的是待查找的所有数组元素的位置:从1开始
				valueIndex[num++]=index;
			}
		}
		this.setCount(num);
		return valueIndex;
	}
	
	/**
	 * 删除数据:考虑到待删除的数据在原数组中存在多个--注意如果待删除的数据个数有多个,则需要逐个遍历,逐个执行删除操作。
	 * 其中注意两点:
	 * 一:这里删除操作因为操作对象是数组,故而是数据的往前移位
	 * 二:逐个遍历待删除的数据时候,下一个数据要注意本身的值大小需要减1,因为返回的IndexValue数组存放的原数组中元素的位置(从1开始)
	 * @param value
	 * @return
	 */
	public int deleteArray(int value){
		int[] indexValue=this.selectArray(value);
		if (this.getCount()==0) {
			return 0;
		}else{
			for (int i = 0; i < this.getCount(); i++) {
				int delValPos=indexValue[i]-1;
				for (int j = delValPos; j < number-1; j++) {
					this.array[j]=this.array[j+1];
				}
				this.number -=  1;
				
				//这里不同于update:因为在这里上面的数据往前面搬迁使得在原先的位序上减一了,再加上本身还需要减一
				if (i+1 <=this.getCount()-1) {
					indexValue[i+1] -= 1;
				}
			}
			
			return 1;
		}
	}
	
	/**
	 * 修改数据操作:建立在查询的基础上,但不同与删除操作,不需要在前一个数据修改完成之后将位序值大小减1,因为修改操作不涉及数组移位的过程
	 * @param value
	 * @param newValue
	 * @return
	 */
	public int updateArray(int value,int newValue){
		int[] indexValue=this.selectArray(value);
		if (this.getCount()==0) {
			return 0;
		}else{
			for (int i = 0; i < this.getCount(); i++) {
				int delValPos=indexValue[i]-1;
				this.array[delValPos]=newValue;
			}
			
			return 1;
		}	
	}
}


public class ArrayOperation{
	public static void main(String[] args) {
		int number=10;
		ArrayModel array=new ArrayModel(number);
		
		//插入一批数据
		array.insertArray(12);
		array.insertArray(34);
		array.insertArray(2);
		array.insertArray(23);
		array.insertArray(5);
		array.insertArray(12);
		array.insertArray(34);
		
		System.out.println("--插入一批数据后显示数据--");
		array.displayArray();
		
		//插入一个数据
		int insVal=23;
		array.insertArray(insVal);
		System.out.println("--插入一个数据"+insVal+"后显示数据--");
		array.displayArray();
		
		//查询数据
		int selVal=2;
		int[] indexValue=array.selectArray(selVal);
		if (array.getCount()==0) {
			System.out.println("查询不到数据: "+selVal);
		}else{
			System.out.println("数据:"+selVal+"在数组中的位置有: ");
			for (int i = 0; i < array.getCount(); i++) {
				System.out.println("第"+indexValue[i]+"个");
			}
		}
		
		//删除数据
		int delVal=2;
		int delRes=array.deleteArray(delVal);
		if (delRes==0) {
			System.out.println("没有这个数据: "+delVal+"  删除失败");
		}else{
			System.out.println("成功删除数据: "+delVal);
		}
		
		System.out.println("--删除数据后显示数据--");
		array.displayArray();
		
		//修改数据
		int oldValue=5;
		int newValue=55;
		int updateRes=array.updateArray(oldValue, newValue);
		if (updateRes==0) {
			System.out.println("不存在数据: "+oldValue+"  修改失败");
		}else{
			System.out.println("成功修改数据: "+oldValue+" 为:"+newValue);
		}
		
		System.out.println("--修改数据后显示数据--");
		array.displayArray();
	}
}



    运行结果截图:



    以上即为运行结果,如果有更好的实现方法或者疑问,欢迎与我讨论!



1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:145216次
    • 积分:2209
    • 等级:
    • 排名:第17770名
    • 原创:80篇
    • 转载:1篇
    • 译文:0篇
    • 评论:60条
    最新评论