线性表

一、线性表

    定义:存在唯一的头元素和尾元素,除第一个元素外,每一个元素有且仅有一个前驱,除最后一个元素外,每一个元素有且仅有一个后继

    分类:顺序表和链表

二、顺序表

       1.记录长度

       2.判空、清空、移除元素并返回

       3.增加元素,指定位置增加元素

       4.遍历

       5.容量的增加和缩小

          1)如果在插入元素时,容器的长度已经大于或等于容器容量,那么就要扩容:将重新创建一个容器时原容器的二倍,然后将原容器的元素copy到新容器中。

          2)如果在删除元素后,容器的长度已经小于容器容量的1/4,那么就要缩小容量:将重新创建一个容器时原容器的1/2,然后将原容器的元素copy到新容器中。

public class Sort01<T> implements Iterable<T> {
private T[] eles;
        //记录当前的长度
        private int N;
    //初始化
    public Sort01(int n) {
        this.eles= (T[]) new Object[n];
        this.N = 0;
    }
    //根据新容器的大小,来进行扩容
    public void resize(int newSize){
        //创建一个临时数组指向原数组
        T[] temp=eles;
        //创建新数组
else=Arrays.copyOf(temp,newSize);
//eles= (T[]) new Object[newSize]; //将原数组的值拷贝到新数组 /*1. for (int i=0;i<N;i++){ eles[i]=temp[i]; }*/ //2.System.arraycopy(temp,0,eles,0,N); } //将线性表置为空 public void clear(){ this.N=0; } //判断当前线性表是否为空 public boolean isEmpry(){ return N==0; } //获取线性表的长度 public int length(){ return N; } //获取指定位置的元素 public T get(int i){ return eles[i]; } //向线性表中添加元素 public void insert(T t){ if(N==eles.length){ resize(eles.length*2); } eles[N++]=t; } //向指定位置添加元素 public void insert(int i,T t){ if(N==eles.length){ resize(eles.length*2); } for (int j=N;j>i;j--){ eles[j]=eles[j-1]; } N++; eles[i]=t; } //删除指定位置元素,返回该元素 public T remove(int i){ T t = eles[i]; for (int j=i;j<N-1;j++){ eles[j]=eles[j+1]; } N--; if(N<eles.length/4){ resize(eles.length/2); } return t; } //查找元素第一次出现的位置 public int indexOf(T t){ for (int i=0;i<=N-1;i++){ if (eles[i].equals(t)){ return i; } } return -1; } /** * 顺序表遍历 * 1)让类实现Iterable接口,重写iterator方法 * 2)在类内部提供一个内部类SIterator,实现iteator接口,重写hasNext和Next方法 */ @Override public Iterator<T> iterator() { return new SIterator(); } private class SIterator implements Iterator{ private int c; public SIterator(){ this.c=0; } /** * 是否还有元素 * @return */ @Override public boolean hasNext() { return c<N; } /** * 返回下一个元素 */ @Override public Object next() { return eles[c++]; } } }
public class SortTest {
    public static void main(String[] args) {

        Quence<String> list =new Quence<>(10);
        list.insert("张三");
        list.insert("李四");
        list.insert(1,"王五");
        //遍历
        list.forEach(quence-> System.out.println(quence));
        System.out.println("-------------");
        System.out.println(list.remove(1));
        System.out.println(list.get(1));
    }
}
原文地址:https://www.cnblogs.com/cqyp/p/12559023.html