线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串...
线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组和链式结构的形式存储。
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
插入:注意判断原来的顺序表容量是否够用,不够的话要进行扩容(搬家)
- 头插:将所有元素从后往前移动,避免覆盖,最后将待插入元素放到第一个位置中。
public void headInsert(int element){//头插
ensureCapacity();
// for(int i = size - 1;i >= 0; i--){
// array[i+1] = array[i];
// }
for(int i = size;i > 0;i--){
array[i] = array[i - 1];
}
array[0] = element;
size++;
}
- 尾插:直接将元素放到size所在的位置
public void tailInsert(int element){//尾插
ensureCapacity();
array[size++] = element;
}
- 插入:给定下标index与数据,将数据插入到 index 的位置,将原先从 index 开始的元素从后往前移动一位。注意判断待插入下标的合法性。
public void insert(int index,int element){//指定下标插入
if (index < 0 || index > size) {
System.err.println("下标不符合!");
return;
}
ensureCapacity();
for(int i = size - 1;i >= index;i--){
array[i + 1] = array[i];
}
array[index] = element;
size++;
}
删除:头删;尾删;指定下标删除
- 头删:将所有元素从前往后向前移动一位。
public void headDelect(){//头删
if (size <= 0) {
System.err.println("顺序表为空");
return;
}
for(int i = 1;i < size;i++){
array[i - 1] = array[i];
}
array[--size] = 0;
}
- 尾删:直接将size--
public void tailDelect(){//尾删
array[--size] = 0;
}
- 给定下标 index 删除,注意检查下标的合法性以及该顺序表是否已经为空。将 index+1 开始的数据从前往后移动到 index。
public void delect(int index){//删除
if (size <= 0) {
System.err.println("顺序表为空");
return;
}
if (index < 0 || index >= size) {
System.err.println("下标错误");
return;
}
for(int i = index + 1;i < size;i++){
array[i - 1] = array[i];
}
array[--size] = 0;
}
完整代码:https://github.com/Consini/JavaSE/blob/master/SequenceList/src/SequenceList.java