数据结构 —— 数组
程序员文章站
2024-02-24 17:30:28
...
对数组的操作
1、使用自定义类封装数组。
2、添加类方法来实现数据操作。
普通数组:
public class MyArray {
// 创建一个数组变量
private long[] arr;
// 表示数组中数据的长度
private int elements;
/**
* 创建一个默认数组长度为50的数组
*/
public MyArray() {
arr = new long[50];
}
/**
* 创建一个指定长度的数组
*
* @param maxSize
*/
public MyArray(int maxSize) {
arr = new long[maxSize];
}
/**
* 添加指定数据
*
* @param value
*/
public void insert(long value) {
arr[elements] = value;
elements++;
}
/**
* 展示数据
*/
public void display() {
System.out.print("[");
for (int i = 0; i < elements; i++) {
System.out.print(arr[i] + " ");
}
System.out.print("]");
}
/**
* 查找指定数据的下标
*
* @param value
*/
public int search(long value) {
int i;
for (i = 0; i < elements; i++) {
if (value == arr[i]) {
break;
}
}
if (i == elements) {
return -1;
} else {
return i;
}
}
/**
* 查找指定下标的数据
*
* @param index
* @return
*/
public long get(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
return arr[index];
}
}
/**
* 删除指定位置的数据
*
* @param index
*/
public void delete(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
for (int i = index; i < elements; i++) {
arr[i] = arr[i + 1];
}
elements--;
}
}
/**
* 修改指定位置的数据
* @param index
* @param newValue
*/
public void chage(int index, long newValue) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = newValue;
}
}
}
有序数组:存放的元素按照一定顺序来排列(由小到大/由大到小)。
有序数组在封装上和普通数组的却别在数据的插入以及查找上。
public class MyOrderArray {
// 创建一个数组变量
private long[] arr;
// 表示数组中数据的长度
private int elements;
/**
* 创建一个默认数组长度为50的数组
*/
public MyOrderArray() {
arr = new long[50];
}
/**
* 创建一个指定长度的数组
*
* @param maxSize
*/
public MyOrderArray(int maxSize) {
arr = new long[maxSize];
}
/**
* 添加指定数据
*
* @param value
*/
public void insert(long value) {
int i;
for (i = 0; i < elements; i++) {
if (arr[i] > value) {
break;
}
}
for (int j = elements; j > i; j--) {
arr[j] = arr[j - 1];
}
arr[i] = value;
elements++;
}
/**
* 展示数据
*/
public void display() {
System.out.print("[");
for (int i = 0; i < elements; i++) {
System.out.print(arr[i] + " ");
}
System.out.print("]");
}
/**
* 查找指定数据的下标
*
* @param value
*/
public int search(long value) {
int i;
for (i = 0; i < elements; i++) {
if (value == arr[i]) {
break;
}
}
if (i == elements) {
return -1;
} else {
return i;
}
}
/**
* 二分查找指定数据的下标
*
* @param value
* @return
*/
public int binarysearch(long value) {
int middle = 0;
int low = 0;
int pow = elements;
while (true) {
middle = (pow + low) / 2;
if (arr[middle] == value) {
return middle;
} else if (low > pow) {
return -1;
} else {
if (arr[middle] > value) {
pow = middle - 1;
} else {
low = middle + 1;
}
}
}
}
/**
* 查找指定下标的数据
*
* @param index
* @return
*/
public long get(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
return arr[index];
}
}
/**
* 删除指定位置的数据
*
* @param index
*/
public void delete(int index) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
for (int i = index; i < elements; i++) {
arr[i] = arr[i + 1];
}
elements--;
}
}
/**
* 修改指定位置的数据
*
* @param index
* @param newValue
*/
public void chage(int index, long newValue) {
if (index >= elements || index < 0) {
throw new ArrayIndexOutOfBoundsException();
} else {
arr[index] = newValue;
}
}
}
上一篇: 数据结构-数组