顺序表

1.概念及结构

顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组上完成数据的增删查改。
顺序表一般可以分为:

  • 静态顺序表:使用定长数组存储。

  • 动态顺序表:使用动态开辟的数组存储。

静态顺序表适用于确定知道需要存多少数据的场景. 静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用.
相比之下动态顺序表更灵活, 根据需要动态的分配空间大小.

2.基本操作

定义 SeqList类的成员的属性和方法

private int[] data = new int[10];
// size 表示当前数组中有多少个有效元素
private int size = 0;

1.打印顺序表

 public void display() {
     // System.out.println(Arrays.toString(data));
     System.out.print("[");
     for (int i = 0; i < size; i++) {
         System.out.print(data[i]);
         if (i != size - 1) {
             System.out.print(", ");
         }
     }
     System.out.println("]");
}

2.在 pos 位置新增元素

// pos 把元素放到哪个下标上. elem 表示插入的元素是啥
// 时间复杂度 O(N) (最坏)
public void add(int pos, int elem) {
    // TODO
    if(pos>data.length||pos<0){
        return;
    }
    if (size >= data.length) {
        realloc();
    }
    if(pos==size){
        data[pos]=elem;
        size++;
    }else{
        for (int i = size; i>pos; i--) {
            data[i]=data[i-1];
        }
        data[pos]=elem;
        size++;
    }
}

3.判定是否包含某个元素

public boolean contains(int toFind) {
    for (int i = 0; i < this.size; i++) {		//遍历
        if (this.data[i] == toFind) {			//判断
            return true;
        }
    }
    return false;
}

4.查找某个元素对应的位置

public int search(int toFind) {
    for (int i = 0; i < this.size; i++) {
        if (this.data[i] == toFind) {
            return i;
        }
    }
    return -1;
}

5.获取 pos 位置的元素

public int getPos(int pos) {
    if (pos < 0 || pos > this.size) {
        return -1;
    }
    return this.data[pos];
}

6.给 pos 位置的元素设为 value

public void setPos(int pos, int value) {
    this.data[pos]=value;
}

7.删除第一次出现的关键字key

//是否存在key值
//若该值为最后一个值时
//删除后key值后面的值往前移填补空位
// 按值删除. 删除第一次出现的值
public void remove(int toRemove) {
    int pos = search(toRemove);
    if(pos == -1){
        return;
    }

    if(pos == this.size - 1){
        this.size--;
        return;
    }

    for(int i = pos; i < this.size - 1; i++){
        this.data[i] = this.data[i + 1];
    }
    this.size--;
}

8.获取顺序表长度

public int size() {
    return this.size;
}

9.清空顺序表

public void clear() {
    this.size = 0;
    this.data = new int[10];
}

10.顺序表扩容为原来的2倍

private void realloc() {
    int[] newData = new int[this.data.length * 2];
    for (int i = 0; i < this.data.length; i++) {
        newData[i] = this.data[i];
    }
    this.data = newData;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值