java数据结构 – 数组使用
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中保留该元素 } } }