数据结构

数据结构与算法(二)数组

数组的定义

数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。首先是线性表(Linear List)。顾名思义,线性表就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。

数组的存储

n维数组的定义

下标由n个数组成的数组称为n维数组。

// 一维数组
int[] a = new int[10];
​
// 二维数组 (面)
int[][] a = new int[2][3];
​
// 三维数组 (体) 类比: 书(体) [2.页码 3.行 4.列]
int[][][] a = new int[2][3][4];

一维数组a[n]

个元素按下角标一次存放,例如:int[] a = new int[5];

二维数组a[m][n]

二维数组每一行由n列,所以每过一行存储空间地址变化是: i * n * c,i代表目标值存储在第几行,n代表一行有多少列,因为需要跨行,例如: int[][] a = new int[2][3];

插入数据

数组是使用连续的内存空间来存储数据的,所以数组的最大的特点就是支持根据下标随机访问数据,这是数组最大的优势。但是,有利就有弊,虽然数组高效的支持下标访问,只不过在插入和删除数据的时候就比较低效了,为了保证内存的连续性,必须要进行数据搬移。

假如有一个数组 [3, 4, 6, 8, 7, 2, 5],第一种情况是插入的元素位于数组的最后一个位置,那么不用进行数据搬移,时间复杂度为 O(1) ,如果插入的位置是第一个,那么必须移动整个数组,时间复杂度为 O(n) 。

删除数据

假如有一个数组 [3, 4, 6, 8, 7, 2, 5],如果删除的是最后一个元素,那么不需要进行数据搬移,如果删除的是第一个元素,那么数组每一个元素都会向前移动一位。

Related post

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

Copyright©2023 青风的后花园网站 保留所有权利 icpICP证: 苏ICP备2021023449号-1