线性表
线性表就是数据排成一条线一样的结构,数据只有前后两个方向。
一、数组
概念
数组:有限个 相同类型的变量所组成的 有序 集合。数组下标从0开始。
存储原理
数组用一组 连续的内存空间 来存储一组具有 相同类型的 数据。
数组可以根据下表随机访问数据。
随机元素寻址:a[i]_address=a[0]_address+i*4(int是4字节(32位),实际内存储是位)
体现三个方面:
连续性分配;相同的类型,下标从0开始
操作
读取和更新可以随机访问,时间复杂度为O(1)
插入:
在数据的实际元素数量小于数组长度时,
尾部插入:
直接把插入元素放在数组尾部的空闲位置
中间插入:
首先把插入位置以及后面的元素向后移动,腾出地方,再把要插入的元素放到对应的数组位置上
在数组已满或者插入元素越界时,要对原数组扩容
超范围插入:
创建一个新数组,长度是旧数组的2倍,再把旧数组中地元素统统复制,让后进行插入操作
删除元素:
如果删除的元素在数组中间,其后元素都需要向前挪动一位
时间复杂度:
读取和更新都是随机访问,所以是O(1)
插入数组扩容和移动元素都是O(n)
删除操作,只涉及元素的移动,时间复杂度是O(n)
优点:
数组拥有高效随机范围能力,只要给下标就可以用常量时间找到对应元素
缺点:
插入删除元素方法,由于数组元素连续紧密存储在内存中,插入和删除会导致大量元素移动影响效率
申请空间必须是连续的,就是即使有空间也可能因为没有足够连续的空间而创建失败
如果超出范围,需要重新申请内存进行存储,原空间就浪费了
应用:
ArrayList,Redis,消息队列等