《数组——数据结构JAVA》

/* (程序头部注释开始)
* 程序的版权和版本声明部分
* Copyright (c) 2011, 烟台大学计算机学院学生
* All rights reserved.
* 文件名称:    《数组——数据结构JAVA》                         
* 作    者:       刘江波                      
* 完成日期:    2012     年    10   月     14   日
* 版 本 号:    V2.1     

* 对任务及求解方法的描述部分
* 问题描述: 
* 程序头部的注释结束
*/

public class Array {
    private int[]Array;
    private int ArraySize;
    private int ArrayLength;
    private void GetArray(){
    	//私有函数,动态分配数组存储空间
    	Array = new int[ArraySize];
    	if(Array == null)
    		System.out.println("Memory Allocation Error");
    }
    public Array(int size){
    	//构造函数,建立一个最大元素个数为size的数组
    	if(size <= 0)
    		System.out.println("Invalid Array Size");
    	else{
    		ArraySize = size;
    	    ArrayLength = 0;
    	    GetArray();
    	}
    }
    //求数组元素个数
    public int GetLength(){
    	return ArrayLength;
    }
    public int GetNode(int i){
    	//取数组中第i个结点的值,若存在,则返回该结点的值;
    	//否则返回null;
    	return(i<0||i>ArrayLength)?null:Array[i];
    }
    public int Find(int x){
    	//查找值为x的结点,若找到,则返回结点序号,否则返回-1;
    	for(int i=0; i<ArrayLength; i++)
    		if(Array[i] == x)return i;
    	return -1;
    }
    //在数组第i个位置,插入值为x的结点,若插入成功,返回true;否则返回false;
    public boolean Insert(int x,int i){
    	if(ArrayLength == ArraySize){
    		System.out.println("overflow");
    		return false;
    	}
    	else if(i<0 || i>ArrayLength){
    		System.out.println("position error");
    		return false;
    	}
    	else
    	{
    		for(int j=ArrayLength-1; j>=i; j--)
    			Array[j+1] = Array[j];//后移
    			Array[i] = x;         //插入
    			ArrayLength++;        //数组长度加一
    			return true;
    	}
    }
    //删除第i个元素结点,成功返回true,否则返回false;
    public boolean Remove(int i){
    	if(ArrayLength == 0){
    		System.out.println("Array Is Empty");
    		return false;
    	}
    	else if(i<0 || i>ArrayLength-1){
    		System.out.println("position error");
            return false;
    	}
    	else
    	{
    		for(int j=i; j<ArrayLength-1; j++)
    			Array[j] = Array[j+1];//前移
    		ArrayLength--;
    		return true;
    	}
    }
    //将两个数组进行“并”运算
    public void Union(Array a,Array b){
    	//将数组b合并到a中,重复元素只留一个;
    	int n = a.GetLength();
    	int m = b.GetLength();
    	for(int i=0; i<m; i++){
    		int x = b.GetNode(i); //从b中取出一元素
    		int k = b.Find(x);    //在a中查找同值元素
    		if(k == -1){          //若找不到同值元素
    			a.Insert(x, n);   //则查到a的最后
    			n++;
    		}
    	}
    }
    //将两个数组进行“交”运算
    public void Intersection(Array a,Array b){
    	//求两数组相同元素,存到b中
    	//int n = a.GetLength();
    	int m = b.GetLength();
    	int i = 0;
    	while(i<m){
    		int x = b.GetNode(i); //从b中取出一元素
    		int k = a.Find(x);    //在a中查找等值元素
    		if(k == -1){          //若没有找到等值元素
    			b.Remove(i);      //从b中删除该元素
    			m--;
    		}
        	else i++;             //否则,在b中保留该元素
    	}
    }
}


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值