能带你起飞的【数据结构】成王第一篇:数据结构的顺序表

目录

前言

一、什么是顺序表

1.顺序表的概念及结构

 创建顺序表

打印顺序表

 获取顺序表长度

在pos位置新增元素

判定是否包含某个元素

 查找某个元素对应的位置

 获取 pos 位置的元素

 给 pos 位置的元素设为 value

 删除你想要删除的元素

总结:

我与你同在。


前言

线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见 的线性表:顺序表、链表、栈、队列、字符串... 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储 时,通常以数组和链式结构的形式存储。

一、什么是顺序表

1.顺序表的概念及结构

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

 其实就是一个数组。那为什么还要写一个顺序表,直接用数组不就好了?不一样的,写到类里面就可以面向对象。

 创建顺序表

public class MyArrayList {
   public int[] elem;//数组
   public int usedSize;//数据的有效个数

   public MyArrayList(){
       this.elem = new int[10];
   }
}

打印顺序表

 打印结果:

因为display是根据usedsize打印的, usedsize没赋值所以什么也不打印。

 获取顺序表长度

在pos位置新增元素

在顺序表里面插入元素的时候所插入的位置的前面一定是存放了元素的,

画图分析:

代码如下:

// 在 pos 位置新增元素
    public void add(int pos, int data) {
       if(pos < 0 || pos > usedSize){
           System.out.println("pos位置不合法");
           return;
       }
       if(isFull()){
           this.elem = Arrays.copyOf(this.elem,this.elem.length*2);
       }
        for (int i = this.usedSize-1; i >=pos ; i--) {
            this.elem[i+1] = this.elem[i];
        }
        this.elem[pos] = data;
        
        this.usedSize++;
        
    }

    public boolean isFull(){
       return this.usedSize == this.elem.length;
    }

打印结果:

判定是否包含某个元素

// 判定是否包含某个元素
    public boolean contains(int toFind) {
        for (int i = 0; i < this.usedSize; i++) {
            if (this.elem[i] == toFind) {
                return true;
            }
        }
        return false;
    }

打印结果:

 查找某个元素对应的位置

 // 查找某个元素对应的位置
    public int search(int toFind) {
        for (int i = 0; i <this.usedSize ; i++) {
            if(this.elem[i] == toFind){
                return i;
            }
        }
       return -1; 
   }

打印结果:

 获取 pos 位置的元素

 // 获取 pos 位置的元素
    public int getPos(int pos) {
       if(pos < 0 || pos > this.usedSize){
           System.out.println("pos位置不合法");
           return -1;//所以,这里说明一下,业务上的处理,这里不考虑
       }
       if (isEmpty()){
           System.out.println("顺序表为空");
           return -1;
       }
       return this.elem[pos];

    }
    public boolean isEmpty(){//判断为不为空的情况下
       return this.usedSize == 0;
    }

打印结果:

 给 pos 位置的元素设为 value

   // 给 pos 位置的元素设为 value
    public void setPos(int pos, int value) {
        if (pos < 0 || pos > this.usedSize) {
            System.out.println("pos位置不合法");
            return ;
        }
        if (isEmpty()) {
            System.out.println("顺序表为空");
            return;
        }
         this.elem[pos] = value;
    }
    public boolean isEmpty() {//判断为不为空的情况下
        return this.usedSize == 0;
    }

 打印结果:

 删除你想要删除的元素

 

//删除第一次出现的关键字key
public void remove(int toRemove) {
   if(isEmpty()){
       System.out.println("顺序表为空");
       return;
   }
   int index = search(toRemove);//查找要删除元素对应的位置
   if(index == -1){
       System.out.println("没有你要找到数字");
       return;
   }

    for (int i = index; i <this.usedSize-1 ; i++) {
        this.elem[i] = this.elem[i+1];
    }
    this.usedSize--;

}

 打印结果:

总结:

本文简单介绍了数据结构的顺序表,如何创建顺序表,顺序表上如何操作数据。通过简单例题的方式加深对顺序表的理解。上述就是今天的内容,有任何疑问的话可以随时私信我,文章哪里出现了问题我都会积极改正,也希望大家能更快的掌握自己想要的知识,让我们一起加油!!!!!

 

猜你喜欢

转载自blog.csdn.net/m0_64397675/article/details/123393526