前言:
- 从第三关开始,开始进行系统的线性表内容了,第三关是数组和双指针,以及相关的高频题。
重点:
- 数组可以作为高级算法的载体,类型多,难易差度大,且是最常用的数据结构。
- 在这关的青铜阶段,先从每个数据结构基础开始,即创建+增删查(这里没有'改'这个操作,其包含于增和删中了)。
要点:
- 数组的初始化、查找、增加和删除操作
- 数组合并题
小结:
1、数组的基本操作代码(初始化、查找、增加和删除):
@SuppressWarnings("all")
public class ArrayBasicOpera {
//初始化数组的方式
public static void main(String[] args){
//1:
int[] a = new int[5];
for (int i = 0; i < 4; i++) {
a[i] = i;
}
//2:
int[] b = new int[]{1,2,3,5,7,8,5,9};
//3:
int[] c = {3,5,7,9,5,2};
//4:
int[] d;
d = new int[5];
}
/**
* 查找一个数组
* @param arr 被进行查找操作的数组
* @param size 数组有效元素的个数
* @param key 查找的值
* @return 返回查找到的位置
* */
public int findElement(int[] arr,int size,int key){
// 这里可以不用index,因为后面for循环结束后,除了返回值,
// 不用再进行其他操作,所以在if语句中直接返回就好了
int index = -1;
for (int i = 0; i < size; i++) {
if (arr[i] == key){
index = i;
}
}
return index;
}
/**
* 按升序的规律,增加一个元素
* @param arr 被进行增加操作的数组
* @param size 数组有效元素的个数
* @param element 插入的值
* @return 返回插入后数组有效数据的数量
* */
public int addElement(int[] arr,int size,int element){
if(size >= arr.length){
return -1;
}
int index = size;
for (int i = 0; i < size; i++) {
if(element < arr[i]){
index = i;
size++;
break;
}
}
for (int i = size; i > index; i--) {
arr[i] = arr[i-1];
}
arr[index] =element;
return size;
}
/**
* 删除一个元素
* @param arr 被进行删除操作的数组
* @param size 数组有效元素的个数
* @param element 删除的值
* @return 返回删除后数组有效数据的数量
* */
public int delectElement(int[] arr,int size,int element){
int index = size;
for (int i = 0; i < size; i++) {
if (arr[i] == element) {
index = i;
size--;
break;//漏写了
}
}
for (int i = index; i < size-1; i++) {
arr[i] = arr[i+1];
}
return size;
}
}
问答:
1、线性表有什么?常见的为线性表的数据结构又分为了什么?
其他/心得:
1、需要考虑:是否要一个下标记录位置?怎么利用好这个下标变量?特殊位置会发生什么(特殊位置比如:数组的0、size这类的边界的位置)?