/**
* 本章目标:
* 1.自制数组类
* 2.有序数组:按关键字升降序排列;二分法查找
* 3.分析有序数组。大O表示法
*/
/**
* 自制数组类 书中有的地方有错误,本程序以修改
*/
class HighArray {
private long[] a;
private int nElements;// 维护array的实际元素个数
public HighArray(int size) {
a = new long[size];
nElements = 0;// 初始化的时候个数设为0
}
/**
* toString()把数组转为字符串,方便打印
*/
public String toString() {
if (nElements == 0)
return "[]";// 若数组元素个数为0,直接返回[]即可
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < nElements; i++) {
sb.append(a[i] + ",");
}
sb.deleteCharAt(sb.length() - 1);
sb.append("]");
return sb.toString();
}
/**
* 打印数组
*/
public void display() {
System.out.println(toString());
}
/**
* 插入value
*
* @param value
*/
public void insert(long value) {
if (nElements >= a.length) {// 数组已满
System.out.println("array is full.");
return;
}
// 未满则进行插入,个数加一
a[nElements] = value;
nElements++;
}
/**
* 删除value
*
* @param value
* @return
*/
public boolean delete(long value) {
if (nElements == 0) {// 数组为空
System.out.println("array is empty...");
return false;
}
// 找到要删除的元素索引j
int j;
for (j = 0; j < nElements; j++) {
if (value == a[j])
break;
}
// 数组中不含value元素
if (j == nElements)
return false;
//若有value元素,则从该元素位置开始到倒数第二个元素,每个元素被其后一个替换,
//即后面的元素往前移动一个位置。此处中文版边界有错误
else {
for (int k = j; k < nElements - 1; k++) {
a[k] = a[k + 1];
}
nElements--;
return true;
}
}
/**
* 数组中是否包含元素key
*
* @param key
* @return
*/
public boolean find(long key) {
int j;
for (j = 0; j < nElements; j++)
if (a[j] == key)
break;
if (j == nElements)
return false;
else
return true;
}
/**
* 数组元素个数
*
* @return
*/
public int size() {
return nElements;
}
}
public class ArrayDemo {
public static void main(String[] args) {
HighArray la = new HighArray(10);
int[] a = { 1, 3, 3, 4, 2, 6, 7, 9, 8, 12, 33 };
for (int i = 0; i < a.length; i++) {
la.insert(a[i]);
la.display();
}
// System.out.println(la.find(3322));
// for(int i = 0;i<a.length;i++){
// la.delete(a[i]);
// la.display();
// }
// la.delete(3);
la.delete(3);
la.display();
}
}
转载于:https://www.cnblogs.com/fstack/p/5617266.html