顺序表和链表
对于顺序表和链表而言,两者都属于线性表,只不过是线性表的不同存储结构。
在这里使用Java对顺序表和链表进行实现
顺序表
线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。
线性表(a1,a2,…,an)的顺序存储示意图如下:
线性表的顺序存储结构,说白了,就是在内存中找了块地儿,通过占位的形式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空地中。既然线性表的每一个数据元素的类型都相同,所以可以用一维数组来实现顺序存储结构,即把第一个数据元素存储在数组0号下标的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。
代码实现:
import java.util.Arrays;
//顺序表
public class MyArrayList<T extends Comparable<T>> implements List<T> {
private T[] element; //数组
private int size; //有效个数
private static final int DEFAULT_CAPACITY = 10; //定义初始大小
public MyArrayList(){
this(DEFAULT_CAPACITY);
}
public MyArrayList(int initCapacity){
element = (T[])new Comparable[initCapacity];
size = 0;
}
private boolean isFull(){
if(size == element.length){
return true;
}
return false;
}
public void show(){
for(int i=0;i<size;i++){
System.out.print(element[i]+" ");
}
System.out.println();
}
@Override
public int size() {
return size;
}
@Override
public boolean contains(T o) {
for(int i=0;i<size;i++){
if(element[i].compareTo(o) == 0){
return true;
}
}
return false;
}
@Override
public void addHead(T value) {
if(isFull()){
element = Arrays.copyOf(element,element.length + (element.length >> 1));
}
for(int i=size;i>0;i--){
element[i] = element[i-1];
}
element[0] = value;
size++;
}
@Override
public void addTail(T value) {
element[size++] = value;
}
@Override
public void deleteHead() {
for(int i=1;i<size;i++){
element[i-1] = element[i];
}
element[--size] = null;
}
@Override
public void deleteTail() {
element[--size] = null;
}
@Override
public void deleteValue(T value) {
if(!contains(value)) {
return;