概念:
顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元,依次存 储线性表中的各个元素、使得线性表中再逻辑结构上响铃的数据元素存储在相邻的物理存储单元中,即通过数据元 素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系。
代码实现:
public class SequenceList<T> implements Iterable<T>{
private T[] eles;
private int N;
// 构造方法
public SequenceList(int capacity) {
this.eles=(T[])new Object[capacity];
this.N=0;
}
// 将线性表清空
public void Clear() {
N=0;
}
// 判断当前线性表是否为空表
public boolean isEmpty() {
return N==0;
}
// 获取线性表的长度
public int length() {
return N;
}
// 获取指定位置的元素
public T get(int i) {
return eles[i];
}
// 向线性表添加元素t
public void insert(T t) {
if(N==eles.length) {
resize(2*eles.length);
}
eles[N++]=t;
}
// 在列表的i位置上插入元素t
public void insert(int i,T t) {
if (i<0 || i>N){
throw new RuntimeException("插入的位置不合法");
}
//元素已经放满了数组,需要扩容
if (N==eles.length){
resize(eles.length*2);
}
for(int index=N;index>i;index--) {
eles[index]=eles[index-1];
}
eles[i]=t;
N++;
}
public T remove(int i) {
if (i<0 || i>N-1){
throw new RuntimeException("当前要删除的元素不存在");
}
T current=eles[i];
for(int index=i;index<N-1;index++) {
eles[index]=eles[index+1];
}
N--;
//当元素已经不足数组大小的1/4,则重置数组的大小
if(N<eles.length/4) {
resize(eles.length/2);
}
return current;
}
//查找t元素第一次出现的位置
public int indexOf(T t) {
for(int i=0;i<N;i++) {
if(eles[i]==t) {
return i;
}
}
return -1;
}
// 重新设置线性表容量的大小
public void resize(int newsize) {
T[] tem=eles;
eles=(T[])new Object[newsize];
for(int i=0;i<N;i++) {
eles[i]=tem[i];
}
}
public Iterator<T> iterator(){
return new SIterator();
}
public class SIterator implements Iterator{
private int cutor;
public SIterator(){
this.cutor=0;
}
@Override
public boolean hasNext() {
return cutor<N;
}
@Override
public Object next() {
return eles[cutor++];
}
}
}