数据结构与算法之数组篇

简介: 数据结构与算法之数组篇

1. 数组简介

数组(Array)是一种 线性表(将数据排成一条线一样的结构) 数据结构,用一组 连续内存空间 来存储一组具有 相同类型 的数据。

2. 数组的常见操作

数组最常见的操作无非增删改差,下面分别来对各个操作进行介绍,假设数组类的定义如下:

public class Array{
    // 用于保存数据
    public int data[];
    // 数组长度
    private int size;
    // 数组中实际元素个数
    private int count;
}

2.1 按照下标随机访问操作

要实现随机访问,那么需要先看访问的下标位置是否合法,不合法则访问失败,合法则放回当前位置元素。

// 根据下标找到数组中的元素并返回
public int find(int index){
    // 下标小于 0 或者超出当前数组元素个数,访问不合法
    if(index < 0 || index >= count){
        return -1;
    }
    // 位置合法直接返回访问位置的值
    return data[index];
}

2.2 数组的插入

要实现数组的插入,通常有如下步骤:


先要判断数组是否已满,满了自然插入不了,只有当数组还没满时才能插入;

而当数组未满时,也需要判断插入位置是否合法,不合法肯定会失败,合法时才能够进行正常插入;

当数组未满同时插入位置合法时,我们只需要将插入位置后的元素整体向后移动一位即可;

同时在要插入的位置处插入要插入的值,同时将数组元素个数加一。


// 向数组中插入元素
public boolean insert(int index, int value){
    // 若数组已满,则插入失败
    if(count == size){
        System.out.println("数组已满");
        return false;
    }
    // 若数组未满,则可以插入,但是需要考虑插入位置是否合法
    // 位置不合法,插入失败
    if(index < 0 || index > count){
        System.out.println("插入数据位置不合法");
        return false;
    }
    // 位置合法
    for(int i = count; i > index; --i){
        // 从插入位置后的数据,整体向后移一位
        data[i] = data[i - 1];
    }
    // 将要插入的位置赋值为要插入的值,同时数组中的元素个数 +1
    data[index] = value;
    count += 1;
    return true;
}

2.3 数组的删除

要实现数组的删除操作,通常有如下步骤:

  1. 判断要删除的位置是否合法,不合法删除失败,合法才能进行下一步从操作;
  2. 删除位置合法时,需要将删除位置后的元素整体向前移动一位,同时数组中的元素数目减一。
// 从数组中删除元素
public boolean delete(int index){
    if(index < 0 || index >= count){
        System.out.println("位置不合法,删除失败");
        return falise;
    }
    // 将删除位置后的元素整体向前移动一位
    for(int i = index + 1; i < count; ++i){
        // 即 data[index - 1] = data[index + 1],往后以此类推
        data[i - 1] = data[i];
    }
    // 删除后,数组元素数目减一
    count -= 1;
    return true;
}

2.4 数组的更新

所谓数组更新,只要位置合法,只需要将对应索引位置赋值为新的值即可。

// 数组更新
public boolean update(int index, int value){
    if(index < 0 || index >= count){
        System.out.println("位置不合法,更新失败")
        return false;
    }
    // 直接将索引位置的赋值为新的值即可
    data[index] = value;
    return true;
}

3. 总结

对于数组这一数据结构,其最常见的操作无非上边所描述的四种,当然我举例都是用的 int 数据类型的值。如果你想用其他数据类型的数组,有了上面的实例,迁移过去不是分分钟的事情么!💯💯💯

目录
相关文章
【数据结构】数组、双链表代码实现
【数据结构】数组、双链表代码实现
|
3月前
|
算法 测试技术 C++
【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II
【数据结构】【双堆】【滑动窗口】3013. 将数组分成最小总代价的子数组 II
|
3月前
|
人工智能 移动开发 算法
【动态规划】【C++算法】LeetCoce996正方形数组的数目
【动态规划】【C++算法】LeetCoce996正方形数组的数目
|
3月前
|
算法 测试技术 C++
【动态规划】【滑动窗口】【C++算法】 629K 个逆序对数组
【动态规划】【滑动窗口】【C++算法】 629K 个逆序对数组
|
2月前
|
数据处理 C语言 C++
数据结构第四弹---数组相关OJ题
数据结构第四弹---数组相关OJ题
|
2月前
|
算法 索引 Python
Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法
22 0
|
24天前
|
算法
算法系列--两个数组的dp问题(2)(下)
算法系列--两个数组的dp问题(2)(下)
20 0
|
24天前
|
存储 算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(下)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
18 0
|
24天前
|
算法
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)(上)
算法系列--动态规划--⼦数组、⼦串系列(数组中连续的⼀段)(1)
22 0
|
24天前
|
算法 计算机视觉
算法系列--两个数组的dp问题(1)(下)
算法系列--两个数组的dp问题(1)
19 0