
咦,为什么数组会放在链表后面呢?
因为原本不打算写数组的,感觉数组比较不那么灵活好用,链表多好呐。
但是仔细想想,数组也是数据结构的一种啊,况且没有数组怎么能衬托出链表的好呢?
而且后面的栈和队列还有数组实现和链表实现两种方式呢。
public class BasicArray{
private int arr[]; // 数组变量
private int elements; // 标记存储元素数量
private int max; // 标记数组最大长度
// 初始化数组
public BasicArray(int max){
this.max = max;
this.arr = new int[max];
}
public static void main(String[] args){
}
}
变量elements既表示了元素的数量,也是第一个空位所在位置(指针),elements-1就是最后一个元素所在位置。
// 插入元素
public void insert(int num){
// 数组满了(溢出)
if(elements > max){
System.out.println("放不下了啦!!");
return;
}
arr[elements] = num;
elements++; // 元素数+1
}
// 删除元素
public void delete(){
if(elements == 0){
return;
}
// 元素数目-1,即指针左移一格
elements--;
}
// 显示内容
public void display(){
// 从0开始循环到elements-1,即最后一个元素
for(int i = 0; i < elements; i++){
System.out.print(arr[i]+" ");
}
System.out.println("\n");
}
// 查找元素
public Object find(int num){
int i;
for(i = 0; i < elements; i++){
if(arr[i] == num){
// 找到了,返回所在位置
return i;
}
}
System.out.println("并没有找到元素 "+num+"\n");
return null;
}
// 根据索引显示数值
public Object get(int index){
// 到了没有数据的地方或溢出 下同
if(index >= elements || index < 0){
System.out.println("该位置没有数据");
return null;
}
return arr[index];
}
从数组中间删除一个元素的操作,就是不断地把后面的元素向前移位。
可以想象一条队伍,中间走了一个人,后面的人都往前走一步的过程。
而替换就是换了一个人进来。
// 删除指定索引的数据
public void remove(int index){
if(index >= elements || index < 0){
return;
}
for(int i = index; i < elements; i++){
arr[i] = arr[i+1];
}
elements--;
}
// 替换指定索引的数据
public void replace(int index, int num){
if(index >= elements || index < 0){
return;
}
arr[index] = num;
}
完成了 QAQ
public static void main(String[] args){
BasicArray arr = new BasicArray(10);
System.out.println("插入 2 3 7 11 13 17");
arr.insert(2);
arr.insert(3);
arr.insert(7);
arr.insert(11);
arr.insert(13);
arr.insert(17);
arr.display();
System.out.println("根据索引显示数值 第3个 第6个(从零开始计数)");
if(arr.get(3)!=null) System.out.println(arr.get(3));
if(arr.get(5)!=null) System.out.println(arr.get(6));
System.out.println(" ");
System.out.println("查找 3 和 5");
if(arr.find(3)!=null)
System.out.println("元素 "+arr.get((int)arr.find(3))+" 被找到,位于数组第 "+arr.find(3)+" 位");
if(arr.find(5)!=null)
System.out.println("元素 "+arr.get((int)arr.find(5))+" 被找到,位于数组第 "+arr.find(5)+" 位");
System.out.println(" ");
System.out.println("修改第0个元素为2333");
arr.replace(0, 2333);
arr.display();
System.out.println("删除一个元素");
arr.delete();
arr.display();
System.out.println("删除第0个元素");
arr.remove(0);
arr.display();
System.out.println("删除第2个元素");
arr.remove(2);
arr.display();
System.out.println("删除不存在的第100个元素");
arr.remove(100);
arr.display();
}
插入 2 3 7 11 13 17 2 3 7 11 13 17
根据索引显示数值 第3个 第6个(从零开始计数) 11 该位置没有数据 null 查找 3 和 5 元素 3 被找到,位于数组第 1 位 并没有找到元素 5
修改第0个元素为2333 2333 3 7 11 13 17
删除一个元素 2333 3 7 11 13
删除第0个元素 3 7 11 13
删除第2个元素 3 7 13
删除不存在的第100个元素 3 7 13
以上 : )
public class BasicArray {
private int arr[]; // 数组变量
private int elements; // 标记存储元素数量
private int max; // 标记数组最大长度
// 初始化数组
public BasicArray(int max){
this.max = max;
this.arr = new int[max];
}
// 插入元素
public void insert(int num){
// 数组满了(溢出)
if(elements > max){
System.out.println("放不下了啦!!");
return;
}
arr[elements] = num;
elements++; // 元素数+1
}
// 删除元素
public void delete(){
if(elements == 0){
return;
}
// 元素数目-1,即指针左移一格
elements--;
}
// 显示内容
public void display(){
// 从0开始循环到elements-1,即最后一个元素
for(int i = 0; i < elements; i++){
System.out.print(arr[i]+" ");
}
System.out.println("\n");
}
// 查找元素
public Object find(int num){
int i;
for(i = 0; i < elements; i++){
if(arr[i] == num){
// 找到了,返回所在位置
return i;
}
}
System.out.println("并没有找到元素 "+num+"\n");
return null;
}
// 根据索引显示数值
public Object get(int index){
// 到了没有数据的地方或溢出 下同
if(index >= elements || index < 0){
System.out.println("该位置没有数据");
return null;
}
return arr[index];
}
// 删除指定索引的数据
public void remove(int index){
if(index >= elements || index < 0){
return;
}
for(int i = index; i < elements; i++){
arr[i] = arr[i+1];
}
elements--;
}
// 替换指定索引的数据
public void replace(int index, int num){
if(index >= elements || index < 0){
return;
}
arr[index] = num;
}
public static void main(String[] args){
BasicArray arr = new BasicArray(10);
System.out.println("插入 2 3 7 11 13 17");
arr.insert(2);
arr.insert(3);
arr.insert(7);
arr.insert(11);
arr.insert(13);
arr.insert(17);
arr.display();
System.out.println("根据索引显示数值 第3个 第6个(从零开始计数)");
if(arr.get(3)!=null) System.out.println(arr.get(3));
if(arr.get(5)!=null) System.out.println(arr.get(6));
System.out.println(" ");
System.out.println("查找 3 和 5");
if(arr.find(3)!=null)
System.out.println("元素 "+arr.get((int)arr.find(3))+" 被找到,位于数组第 "+arr.find(3)+" 位");
if(arr.find(5)!=null)
System.out.println("元素 "+arr.get((int)arr.find(5))+" 被找到,位于数组第 "+arr.find(5)+" 位");
System.out.println(" ");
System.out.println("修改第0个元素为2333");
arr.replace(0, 2333);
arr.display();
System.out.println("删除一个元素");
arr.delete();
arr.display();
System.out.println("删除第0个元素");
arr.remove(0);
arr.display();
System.out.println("删除第2个元素");
arr.remove(2);
arr.display();
System.out.println("删除不存在的第100个元素");
arr.remove(100);
arr.display();
}
}