数组结构--数组(一)

这篇博客介绍了数组的基本概念,包括其作为有限个相同类型元素有序集合的特点。数组采用顺序存储,支持随机访问,查找操作的时间复杂度为O(1),但插入和删除操作的时间复杂度为O(n)。内容涵盖了数组的插入、查找、修改和删除操作,并讨论了适用场景。插入操作涉及到可能的数组扩容,查找操作包括按位置和按值查找,删除操作则涉及元素移动。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数组结构–数组(一)

数组的特点

  • 数组是有限个相同类型的元素所组成的有序集合。
  • 数组是一种线性的物理结构,存储方式为顺序存储,访问方式是随机访问。
  • 利用下标查找元素的时间复杂度为 O(1) ,插入、删除元素的时间复杂度为 O(n)
  • 数组适用于读操作多,写操作少的场景

数据的基本操作

数组的基本操作包括增、删、查、改四种基本的操作。注: 这里假设数组都是无序的

插入操作

插入可以分为尾部新增和中间插入两种情况,中间插入元素本质是将 i + 1 i+1 i+1至最后一个索引对应的元素全部向后移动一位。

不过插入元素时需要扩容。扩容,就是扩大数 i i i组的长度。当插入元素时,若发现数组长度已满,此时需要扩容数组,操作为创建一个新的同类型的数组,长度为原来的2倍,将原始数组的元素拷贝到新数组中,此时即可插入新元素。

插入实现:

def insert(lst, i, e):
    """
    插入特定位置的元素
    """
    length = len(lst)
    if i < 0 or i > length:  # 边界值处理,如果插入下标超过数组长度或者插入下标小于0,则视为插入异常,结束算法
        print('插入位置超过数组长度,插入失败')
        return
    our_list = lst[:]  # 复制原表,防止原表改变
    our_list.append(our_list[-1])  # 扩大列表长度,方便插入元素
    for j in range(length - 1, i, -1):  # 向后移动元素
        our_list[j] = our_list[j - 1]
    our_list[i] = e

    return our_list

测试结果:

lst = [0, 1, 2, 4, 5]
our_lst = insert(lst, 3, 3)
print('原数组:', lst)
print('插入后数组', our_lst)

#结果:
#原数组: [0, 1, 2, 4, 5]
#插入后数组 [0, 1, 2, 3, 4, 5]

查找操作

查找比较简单

查找实现:

查找特定位置元素

def find_i(lst, i):
    '''
    查询特定位置的元素
    :param lst: 元素数组
    :param i: 查询i位置的元素
    :return:
    '''
    if i < 0 or i >= len(lst):  # 边界范围处理
        print('下标{}超出数组范围'.format(i))
        return
    for j in range(len(lst)):
        if j == i:
            return lst[i]
        
      """
      上面只是做下基础演示
      最简单的直接就是: return lst[i]
      """
        
print(find_i(our_lst, 4))

#结果:
#4

查找特定值元素

def find_value(lst, e):
    '''
    查询特定的值e的元素下标
    :param lst: 元素数组
    :param i: 查询i位置的元素
    :return:
    '''
    if len(lst) == 0:  # 边界范围处理,空表
        print('数组为空,无法查到元素{}'.format(e))
        return

    for i in range(len(lst)):
        if lst[i] == e:
            return i
    # 无法查到元素时处理
    print('元素{}不在数组中'.format(e))
    return

修改操作

def update(lst, i, e):
    """
    更新特定位置i的元素为特定值e,这里在原表基础上改变,即修改原表
    """
    if i < 0 or i >= len(lst):  # 边界范围处理
        print('下标{}超出数组范围'.format(i))
        return
    lst[i] = e
    return lst

删除操作

移除指定索引的元素本质上是将 i + 1 i+1 i+1至最后一个索引对应的元素全部向前移动一位。

def remove(lst, i):
    """
    移除特定位置i处的元素
    :param lst:
    :param i:
    :return:
    """
    length = len(lst)
    if i < 0 or i >= length:  # 边界范围处理
        print('下标{}超出数组范围'.format(i))
        return

    if i == (length - 1):  # 删除末尾位置的元素时直接删除
        return lst[:-1]
    our_lst = lst[:]  # 防止原表改变
    for j in range(i + 1, length):
        our_lst[j - 1] = our_lst[j]
    return our_lst[:-1]  # 这里改变数组的长度

以上内容比较简单,这里主要是回顾一下数据结构中数组的基础知识

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值