顺序表实现

简介: 顺序表实现

顺序表

概念

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

顺序表一般可分为:

  • 静态顺序表:使用定长数组存储
  • 动态顺序表:使用动态开辟的数组村粗

顺序表的实现

静态顺序表使用于确定知道需要存多少数据的场景

静态顺序表的定长数组导致N定大了,空间开多了浪费,开少了不够用

如何实现循序表?

  • 第一步首先定义类的属性
    我们根据定义知道顺序表的底层是一个数组,所以我们首先要定义数组这个属性,但怎么来记录数组中已经存了几个数呢?所以这里我们需要重新定义一个属性就是usedSize来记录数组中的数的个数。
public class List {
    public int[] elem;
    public int usedSize;
    public List() {
        this.elem = new int[10];//构造方法,详情看类和对象
    }
}
  • 第二步
    实现各种接口

打印顺序表

public void display() {
    for(int i = 0; i < this.usedSize; i++) {
        System.out.print(this.elem[i] + " ");
    }
    System.out.println();
}

在pos位置新增元素

假如,如图所示

我们可以看到在POS=2位置添加元素,需要将pos=2之后的数据全部向后移动一位,才能将pos=2的位置腾出来,全部移动一位之后变为:

具体代码如何实现:

从后往前遍历

public void add(int pos, int date) {
    for(int i = this.usedSzie; i >= pos; i--) {
        elem[i+1] = elem[i];
    }
    this.elem[pos] = date;
    this.usedSzie ++;
}

判定是否包含某个元素

遍历这个顺序表如果存在就返回true,否则返回false

public boolean contains(int date) {
    for(int i = 0; i < this.usedSize; i++) {
        if(elem[i] == date) {
            return true;
        }
    }
    return false;
}

查找某个元素的位置

像刚才查找是否存在一样,只不过放回的是下标

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

获取pos位置的元素

public int getPos(int pos) {
    return this.elem[pos];
}

给pos位置的元素设为value

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

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

只需要找到第一次出现这个关键字的下标,然后让后面的数字都往前移动一位

初始位置是这样:

假设这里删除66

这样66就没有了

public void remove(int key) {
    int pos = search(key);
    for(int i = pos; i < this.usedSize; i++) {
        this.elem[i] = this.elem[i+1];
    }
    this.usedSize --;
}

获取顺序表的长度

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

清空顺序表

直接让usedSize为0即可

public void clear() {
    this.usedSize = 0;
}

顺序表的问题

  • 顺序表中间(头部)的增减(删除)时间复杂度为O(N)
  • 增容需要申请空间,拷贝数据,释放旧空间。会有不小的消耗

这些问题如何解决,单链表应运而生。


目录
打赏
0
0
0
0
2
分享
相关文章
顺序表详解(SeqList)
顺序表详解(SeqList)
266 0
【顺序表】
【顺序表】
62 0
|
9月前
|
顺序表的应用
顺序表的应用
53 5
|
9月前
|
顺序表专题
顺序表专题
55 4
|
10月前
|
顺序表讲解
顺序表讲解
77 0
|
10月前
顺序表的实现
顺序表的实现
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等