顺序

  • 顺序表—线性表的顺序存储结构,指的是用一段地址连续的存储单元一次存储线性表的数据元素。
  • 顺序表的实现—用一维数组来实现线性表的顺序存储结构,即把第一个数据元素存放到数组下标为0的位置,接着把线性表相邻的数据元素存放到数组相邻的位置。
  • 三个属性:
    存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置;
    线性表的最大存储容量:数组长度 Maxsize;
    线性表的当前长度:length
  • 数组的长度和线性表的长度
    数组长度:存储线性表的存储空间的长度,存储分配后这个量一般是不会改变的。
    线性表的长度:线性表中数据元素的个数,随着线性表的插入和删除操作的进行,是会改变的。
    在任意时刻,线性表的长度应该小于数组的长度。
  • 顺序表的插入
    顺序表的插入:必须有前驱
class TestSqlist {
   //属性
   private int[] elem;  //存放数据的数组
   private int usersize;  //有效数据个数

   public TestSqlist() {  //不带参数的方法
       this(10);   //一般默认数组长度为10
   }

   public TestSqlist(int size) {
       this.elem = new int[size];
       this.usersize = 0;
   }

   //方法
   public boolean isFull() {
       if (this.usersize == this.elem.length) {
           return true;
       }
       return false;
   }
   / /先判断是否未满,如果是满的,就进行动态扩容,然后插入,插入时,将要插入位置以后的元素向后移动,从最后一个元素开始移动(int i,i--public boolean insert(int pos, int val) {
       if (isFull()) {
           //动态扩容   2倍扩容    Arrays.ccopyOf()
           this.elem = Arrays.copyOf(this.elem, this.elem.length * 2);
       }
       if (pos < 0 || pos > this.usersize) {
           return false;
       } else {
           //数据全部移开,从数组的最后一个元素开始移动
           for (int i = this.usersize - 1; i > pos; i--) {
               this.elem[i + 1] = this.elem[i];
           }
           //数据全部移开后
           this.elem[pos] = val; //插入
           this.usersize++;  //有效数据个数增加
       }
       return true;
   }
  • 删除
//删除关键字key的值(第一次出现的key) 后面的数组元素进行向前覆盖,然后有效数据的个数减少(usersize--)
public boolean delete(int key) {
    //查找是否有关键字key
    int index = search(key);
    // 如果有:开始删除
    if (index < 0) {   //没有关键字
        return false;
    }
    //有关键字  进行删除  后面的覆盖前面的数据
    for (int i = 0; i < this.usersize - 1; i++) {
        this.elem[i] = this.elem[i + 1];
    }
    this.usersize--;
    return true;

}
  • 查找关键字key的下标
//先判断是否为空(有效数字的个数为0   usersize == 0),然后查找,当this.elem[i]的值与key相等,
// 就返回下标i,否则就返回-1;
public boolean isEmpty() {
    if (this.usersize == 0) {
        return true;
    }
    return false;
}

public int search(int key) {
    if (isEmpty()) {
        return -1;
    }
    for (int i = 0; i < this.usersize; i++) {
        if (this.elem[i] == key) {
            return i;
        }
    }
    return -1;
}
  • 得到任意位置的值
//得到pos位置的值   先判断pos位置  调用isFull()方法
    public int getPos(int pos)  {
        if(pos < 0 || pos > this.usersize || isEmpty()) {
            //return -1;//如果返回-1,可能数组中有-1这个值,所以此刻抛出异常
            throw new UnsupportedOperationException("pos位置不合法或者顺序表为空");
        }
        for (int i = 0; i < this.usersize - 1 ; i++) {
            return i;
        }
        return this.elem[pos];
    }
      public void show() {
        for (int i = 0; i < this.usersize ; i++) {
            System.out.print(this.elem[i]+ " ");
        }
        System.out.println();
    }
}

在这里插入图片描述

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43301647/article/details/84479265