数据结构与算法-数组

线性表(Linear List)就是数据排成像一条线一样的结构,数据只有前后两个方向
image

数组

数组(Array)是有限个相同类型的变量所组成的有序集合,数组中的每一个变量被称为元素。数组是
最为简单、最为常用的数据结构。

数组用一组连续的内存空间来存储一组具有相同类型的数据
image

数组可以根据下标随机访问数据
image

假设首地址是:1000。int是4字节(32位),实际内存存储是位
随机元素寻址公式:

a[i]_address=a[0]_address+i*4

该公式解释了三个方面

  • 数组内存是连续性分配
  • 数组的元素具有相同的类型
  • 数组下标从0开始

操作

尾部插入

在数据的实际元素数量小于数组长度的情况下:直接把插入的元素放在数组尾部的空闲位置即可,等同于更新元素的操作
image

中间插入

在数据的实际元素数量小于数组长度的情况下:由于数组的每一个元素都有其固定下标,所以首先把插入位置及后面的元素向后移动,腾出地方,
再把要插入的元素放到对应的数组位置上。
image

超范围插入

假如现在有一个数组,已经装满了元素,这时还想插入一个新元素,或者插入位置是越界的。这时就要对原数组进行扩容:可以创建一个新数组,长度是旧数组的2倍,再把旧数组中的元素统统复制过去,这样就实现了数组的扩容。
image

优缺点

优点:

数组拥有非常高效的随机访问能力,只要给出下标,就可以用常量时间找到对应元素

缺点:

  1. 插入和删除元素方面。由于数组元素连续紧密地存储在内存中,插入、删除元素都会导致大量元素被迫移动,影响效率。 (ArrayList LinkedList )
  2. 申请的空间必须是连续的,也就是说即使有空间也可能因为没有足够的连续空间而创建失败
  3. 如果超出范围,需要重新申请内存进行存储,原空间就浪费了

应用

数组是基础的数据结构,应用太广泛了,ArrayList、Redis、消息队列等等。

数据结构和算法的可视化网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

posted @ 2021-11-16 23:27  狻猊的主人  阅读(61)  评论(0编辑  收藏  举报