数组元素删除与排序
2016-02-25 14:40
706 查看
2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1。向main()中添加一些代码来使用这个方法。 可以假设所有关键字都是正数。
2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除。 将这个方法命名为removeMax()。
2.3 编程作业2.2中的removeMax()方法提供了一种通过关键字值进行数组排序的方法。实现一个 排序方案,要求不修改HighArray类,只需对main()中的代码进行修改。这个方法需要第二个 数组,在排序结束时数组数据项是逆序排列的。
2.6 向highArray.java程序(清单2.3)的HighArray类中加入一个noDup()方法,使之可以将数组的所有重复数据项删除。即如果数组中有三个数据项的关键字为17,noDup()方法会删除其中的两个。不必考虑保持数据项的顺序。一种方法是先用每一个数据项同其他数据项比较,并用null(或是一个不会用在真正的关键字中的特殊值)将重复的数据项覆盖掉。然后将所有的null删除,当然还要缩小数组的大小。
2.2 修改编程作业2.1中的方法,使之不仅返回最大的关键字,而且还将该关键字从数组中删除。 将这个方法命名为removeMax()。
2.3 编程作业2.2中的removeMax()方法提供了一种通过关键字值进行数组排序的方法。实现一个 排序方案,要求不修改HighArray类,只需对main()中的代码进行修改。这个方法需要第二个 数组,在排序结束时数组数据项是逆序排列的。
2.6 向highArray.java程序(清单2.3)的HighArray类中加入一个noDup()方法,使之可以将数组的所有重复数据项删除。即如果数组中有三个数据项的关键字为17,noDup()方法会删除其中的两个。不必考虑保持数据项的顺序。一种方法是先用每一个数据项同其他数据项比较,并用null(或是一个不会用在真正的关键字中的特殊值)将重复的数据项覆盖掉。然后将所有的null删除,当然还要缩小数组的大小。
public class HighArray { /** * @param args */ private long[] a; private int nElems; public HighArray(int max){ a = new long[max]; nElems = 0; } public boolean find(long searchKey){ int j; for(j=0;j<nElems;j++){ if(a[j] == searchKey){ break; } } if(j == nElems) return false; else return true; } public void insert(long value){ a[nElems] = value; nElems++; } public void delete(long value){ int j ; for(j = 0;j < nElems;j++) if(value == a[j]) break; for(int k = j;k < nElems;k++){ a[k] = a[k+1]; } nElems--; } public void display(){ for(int j = 0;j < nElems;j++){ System.out.print(a[j] + " "); } System.out.println(""); } //======================================================================================= //编程作业2.1 public long getMax(){ long max = -1; for(int j =0; j < nElems-1;j++){ if(a[j] > max){ max = a[j]; } } return max; } //========================================================================================== //编程作业2.2 public long removeMax(){ long max = -1; int index = -1; for(int j = 0;j <nElems;j++){ if(a[j] > max){ max = a[j]; index = j; } } if(index != -1){ for(int i = index+1;i< nElems;i++){ a[i-1] = a[i]; } nElems--; } return max; } //========================================================================================== //编程作业2.6 public void noDup(){ int NULL = -1; for(int j = 0;j <nElems;j++){ for(int i = j+1;i < nElems;i++){ if(a[j]!=NULL && a[j]==a[i]){ a[i] = NULL; } } } for(int i = 0;i < nElems;){ if(a[i]==NULL){ for(int j =i+1;j < nElems; j++){ a[j-1] = a[j]; } nElems--; } else{ i++; } } } }
public class HighArrayApp { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub int maxSize = 100; HighArray arr; arr = new HighArray(maxSize); arr.insert(77); arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); arr.display(); int searchKey = 35; if(arr.find(searchKey)){ System.out.println("Found "+searchKey); } else{ System.out.println("Can't find "+searchKey); } arr.delete(00); arr.delete(55); arr.delete(99); arr.display(); //========================================================================================== //编程作业2.1 long max = arr.getMax(); System.out.println("Found max is "+max); //================================================================================ //编程作业2.2 arr.removeMax(); arr.display(); //================================================================================ //编程作业2.3 HighArray sortedArr = new HighArray(maxSize); int i = 0; max = arr.removeMax(); while(max!=-1){ sortedArr.insert(max); max = arr.removeMax(); } System.out.println("逆序排列"); sortedArr.display(); arr.insert(77); // insert 10 items arr.insert(99); arr.insert(44); arr.insert(55); arr.insert(22); // 重复值 arr.insert(44); arr.insert(77); arr.insert(44); arr.insert(66); arr.insert(88); arr.insert(11); arr.insert(00); arr.insert(66); arr.insert(33); System.out.println("加入重复值后:"); arr.display(); arr.noDup(); System.out.println("去掉重复后:"); arr.display(); } }
相关文章推荐
- ruby 数组使用教程
- Ruby中的数组和散列表的使用详解
- C#实现AddRange为数组添加多个元素的方法
- C#比较二个数组并找出相同或不同元素的方法
- C#动态调整数组大小的方法
- 详解Lua中的数组概念知识
- Perl中的列表和数组学习笔记
- 探索PowerShell (八) 数组、哈希表(附:复制粘贴技巧)
- C#中数组初始化与数组元素复制的方法
- C#交错数组用法实例
- Linux Shell 数组建立及使用技巧
- PowerShell数组的一些操作技巧
- C#通过yield实现数组全排列的方法
- C#不重复输出一个数组中所有元素的方法
- C#实现将数组内元素打乱顺序的方法
- C#中用foreach语句遍历数组及将数组作为参数的用法
- 详解C#编程中一维数组与多维数组的使用
- Ruby简明教程之数组和Hash介绍
- 深入解析C#中的交错数组与隐式类型的数组
- C语言查找数组里数字重复次数的方法