java实现顺序表

平常学习中、都是用c/c++实现的、最近用java实现了顺序表。

线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素,使得线性表在逻辑结构上相邻的元素存储在连续的物理存储单元中,即:通过数据元素物理存储的连续性来反应元素之间逻辑上的相邻关系。采用顺序存储结构存储的线性表通常简称为顺序表。

结构体

1
2
3
4
5
6
7
8
9
10
11
public class MyArray {
public int[] data;
public int length; //数组元素个数
public int max;

// 构造器中 传入 数组的最大容量
public MyArray(int max) {
this.max = max;
data = new int[max];
}
}

CRUD

在第i个位置上插入元素

在顺序表的第i个位置插入元素e,首先将顺序表第i个位置的元素依次向后移动一个位置,然后将元素e插入第i个位置,移动元素要从后往前移动元素,即:先移动最后一个元素,在移动倒数第二个元素,依次类推;插入元素之前要判断插入的位置是否合法,顺序表是否已满,在插入元素之后要将表长Length++;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 增  在第 i 个位置 插入 value
public void insert(int i,int value){
// 位置超过 抛异常
if(i > length+1 || i < 1)
throw new RuntimeException("插入位置不合法");
if(length >= max)
throw new RuntimeException("数组容量已满");

for(int j=length; j>=i; j--){
data[j] = data[j-1];
}
data[i-1] = value;
length++;
}

删除第i个元素

删除数据表中的第i个元素,需要将表中第i个元素之后的元素依次向前移动一位,将前面的元素覆盖掉。移动元素时要想将第i+1个元素移动到第i个位置,在将第i+2个元素移动i+1的位置,直到将最后一个元素移动到它的前一个位置,进行删除操作之前要判断顺序表是否为空,删除元素之后,将表长Length–;

1
2
3
4
5
6
7
8
9
10
// 删除 第i个位置的 元素
public int delete(int i){
if(i<1 || i>length)
throw new RuntimeException("删除位置不合法");
int value = data[i-1];
for(int j=i; j<length; j++)
data[j-1] = data[j];
length--;
return value;
}

遍历

1
2
3
4
5
6
// 遍历
public void display(){
for(int i=0; i<length; i++)
System.out.print(data[i]+" ");
System.out.println();
}