数据结构学习记录(一)--------数组的地层实现代码(数据的add、delete、查、改)
2019-04-23 17:25
197 查看
这篇博客是在面试季,复习的数据结构的第一章。
数组
本文会贴出代码与实现出来的效果
最后还要讲一讲:数组中增加与删除元素的
废话不多说,上代码!
Array.java public class Array { private int[] data; private int size; // 构造函数,传入数组的容量capacity构造Array public Array(int capacity){ data = new int[capacity]; size = 0; } // 无参数的构造函数,默认数组的容量capacity=10 public Array(){ this(10); } // 获取数组的容量 public int getCapacity(){ return data.length; } // 获取数组中的元素个数 public int getSize(){ return size; } // 返回数组是否为空 public boolean isEmpty(){ return size == 0; } // 向所有元素后添加一个新元素 public void addLast(int e){ add(size, e); } // 在所有元素前添加一个新元素 public void addFirst(int e){ add(0, e); } // 在index索引的位置插入一个新元素e public void add(int index, int e){ if(size == data.length) throw new IllegalArgumentException("Add failed. Array is full."); if(index < 0 || index > size) throw new IllegalArgumentException("Add failed. Require index >= 0 and index <= size."); for(int i = size - 1; i >= index ; i --) data[i + 1] = data[i]; data[index] = e; size ++; } // 获取index索引位置的元素 public int get(int index){ if(index < 0 || index >= size) throw new IllegalArgumentException("Get failed. Index is illegal."); return data[index]; } // 修改index索引位置的元素为e public void set(int index, int e){ if(index < 0 || index >= size) throw new IllegalArgumentException("Set failed. Index is illegal."); data[index] = e; } // 查找数组中是否有元素e public boolean contains(int e){ for(int i = 0 ; i < size ; i ++){ if(data[i] == e) return true; } return false; } // 查找数组中元素e所在的索引,如果不存在元素e,则返回-1 public int find(int e){ for(int i = 0 ; i < size ; i ++){ if(data[i] == e) return i; } return -1; } // 从数组中删除index位置的元素, 返回删除的元素 public int remove(int index){ if(index < 0 || index >= size) throw new IllegalArgumentException("Remove failed. Index is illegal."); int ret = data[index]; for(int i = index + 1 ; i < size ; i ++) data[i - 1] = data[i]; size --; return ret; } // 从数组中删除第一个元素, 返回删除的元素 public int removeFirst(){ return remove(0); } // 从数组中删除最后一个元素, 返回删除的元素 public int removeLast(){ return remove(size - 1); } // 从数组中删除元素e public void removeElement(int e){ int index = find(e); if(index != -1) remove(index); } @Override public String toString(){ StringBuilder res = new StringBuilder(); res.append(String.format("Array: size = %d , capacity = %d\n", size, data.length)); res.append('['); for(int i = 0 ; i < size ; i ++){ res.append(data[i]); if(i != size - 1) res.append(", "); } res.append(']'); return res.toString(); } }
接下来是main.java
public class Main { public static void main(String[] args) { Array arr = new Array(20); for(int i = 0 ; i < 10 ; i ++) arr.addLast(i); System.out.println(arr); arr.add(1, 100); System.out.println(arr); arr.addFirst(-1); System.out.println(arr); // [-1, 0, 100, 1, 2, 3, 4, 5, 6, 7, 8, 9] arr.remove(2); System.out.println(arr); arr.removeElement(4); System.out.println(arr); arr.removeFirst(); System.out.println(arr); } }
下图是运行结果
说明:删除元素与增加元素的代码,在找元素位置的时候,用size(数组中元素的个数)来定位与移动元素。
删除元素代码片段:
通过将index+1位置的元素移动到index位置,
直接将原来的数组中的值给覆盖掉!
移动过程中,直到移动到数组索引为size-1的时候即可。
eg:最后不要忘记维护数组中的size,因为移除一个元素,要–
public int remove(int index){ int ret = data[index]; for(int i = index + 1 ; i < size ; i ++) data[i - 1] = data[i]; size --; return ret; }
增加元素片段:
添加元素的思想:
从最后一个数字开始,
依次将每个元素向后移动一位。
直到目标索引位置停止移动。
最后,不要忘记维护数组的size。
注意:数组中最后一个元素=size-1;
public void add(int index, int e){ for(int i = size - 1; i >= index ; i --) data[i + 1] = data[i]; data[index] = e; size ++; }
心得:数组是数据结构的最基础部分,后续的数据结构全部都依托数组来运行的。
数组元素的操作,是一种思想。是一种抽象类型的思想,很多东西不许追根溯源(要有个度即可)。只需牢牢记住即可。
相关文章推荐
- 数据结构学习记录(二)-----栈与队列(基于动态数组的实现)
- 数据结构学习记录连载10(队列提高要求实现)
- 数据结构(Java 队列模拟)本代码重在学习数据结构思路,代码完整性欠缺,请见谅
- 数据结构探索,使用C\C++实现最简单的数据结构代码(一) ——栈(stack)
- SQL Server中的XML数据进行insert、update、delete操作实现代码
- discuz学习记录:前面的数据用EasyUI DataGrid显示,实现了服务器端分页
- 数据结构学习之——数组队列和循环队列的实现与效率的测试
- 数据结构学习之数组栈实现
- TCP带外数据学习总结(概念,发送接收过程,数据到达检测,代码实现)
- 学习数据结构笔记--顺序表的数组实现
- 严蔚敏版数据结构学习笔记和代码实现
- PHP中使用数组实现堆栈数据结构的代码
- 【数据结构学习之完全从零实现所有数据结构的代码编写之二】智能指针
- 后缀数组的学习(三):SA数组实现代码分析
- 【C++数据结构学习笔记---栈】用数组实现栈
- 算法学习---基本数据类型的数组二分查找实现
- 数据结构学习---线性表的数组实现LIstArray
- git是一种分布式代码管理工具,git通过树的形式记录文件的更改历史,比如: base'<--base<--A<--A' ^ | --- B<--B' 小米工程师常常需要寻找两个分支最近的分割点,即base.假设git 树是多叉树,请实现一个算法,计算git树上任意两点的最近分割点。 (假设git树节点数为n,用邻接矩阵的形式表示git树:字符串数组matrix包含n个字符串,每个字符串由字符'0
- PHP中使用数组实现堆栈数据结构的代码