刘宇波老师的玩转数据结构讲的非常不错,记个笔记。
学数据结构可以不用局限于语言,虽然课上使用的Java,但是同样可以使用其他任何语言来编写,这里记录Java的代码,后续会用Python重写上传github。
1. 定义一个Array数组类,并添加构造函数定义这个类的基本属性
public class Array {
//定义成员变量
private int[] data;
private int size;
//使用构造函数定义类的属性 当创建对象时就会自动构建一个Array
public Array(int capacity){
data = new int[capacity]; // 指定了创建数组的大小
size = 0;
}
//使用无参数构造函数给出默认值
public Array(){
this(10); // this指向有参数的构造函数
}
}
2. 常用方法
//获取数组的元素个数
public int getSize() {
return size;
}
//获取数组的容量
public int getCapacity(){
return data.length; // 这里返回不了capacity
}
//判断数组是否为空
public boolean isEmpty(){
return size == 0;
}
//获取索引位置元素
public int get(int index){
if (index <0 || index > size)
throw new IllegalArgumentException("Get failed.Index is Illegal");
return data[index];
}
3. 数据结构基本操作之“增”
add方法逻辑是先把原本的数据向后移,空出指定的index位置,最后把需要添加的数放进数组。
//在指定位置添加元素e
public void add(int index, int e){
if (index <0 || index > size) //if一定要加括号
throw new IllegalArgumentException("Get failed.Index is Illegal");
if (size == data.length)
throw new IllegalArgumentException("Add is failed.data is full");
for(int i = size - 1; i >= index; i --){ //判断条件不能错
data[i+1] = data[i];
data[index] = e;
size ++;
}
}
//数组末尾添加元素
public void addLast(int e){
add(size, e);
}
//数组首端添加元素
public void addFirst(int e){
add(0, e);
}
4. 数据结构基本操作之“删”
remove方法逻辑和add类似,index后的元素向前移动,把index位置元素挤掉。
//删除指定位置元素并返回其值
public int remove(int index){
if (index <0 || index > size) //if一定要加括号
throw new IllegalArgumentException("Get 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 void removeFirst(){
remove(0);
}
public void removeLast(){
remove(size-1);
}
//删除元素e
public void removeElement(int e){
int index = findIndex(e);
if(index != 1)
remove(index);
}
5. 数据结构基本操作之“改”
//修改指定位置元素为e
public void adjust(int index, int e){
if (index <0 || index > size) //if一定要加括号
throw new IllegalArgumentException("Get failed.Index is Illegal");
data[index] = e;
}
6. 数据结构基本操作之“查”
//查找是否存在元素e
public boolean find(int e){
for(int i = 0;i < size; i ++)
if (data[i] == e)
return true;
return false;
}
//查找元素e的索引
public int findIndex(int e){
for(int i = 0;i < size; i ++)
if (data[i] == e)
return i;
return -1; // 不存在返回-1
}
//删除指定位置元素并返回其值
public int remove(int index){
if (index <0 || index > size) //if一定要加括号
throw new IllegalArgumentException("Get failed.Index is Illegal");
int ret =data[index];
for(int i = index + 1; i < size; i ++)
data[i - 1] = data[i];
size --;
return ret;
}