基础数据结构:数组

基础数据结构:数组

数组 是一个含有数据的列表。 索引 来标识每项数据在数组中的位置。

若想了解某个数据结构(例如数组)的性能,得分析程序怎样操作这一数据结构。 一般数据结构都有以下4种操作(或者说用法)。

•读取:查看数据结构中某一位置上的数据。对于数组来说,这意味着查看某个索引所指的数据值。例如,查看索引2上有什么食品,就是一种读取。

•查找:从数据结构中找出某个数据值的所在。对于数组来说,这意味着检查其是否包含某个值,如果包含,那么还得给出其索引。例如,检查"dates"是否存在于食品清单之中,给出其对应的索引,就是一种查找。

•插入:给数据结构增加一个数据值。对于数组来说,这意味着多加一个格子并填入一个值。例如,往购物清单中多加一项"figs",就是一种插入。

•删除:从数据结构中移走一个数据值。对于数组来说,这意味着把数组中的某个数据项移走。例如,把购物清单中的"bananas"移走,就是一种删除。

操作的速度,并不按时间计算,而是按步数计算。 此外,操作的速度,也常被称为时间复杂度

读取

读取,即查看数组中某个索引所指的数据值。

这只要一步就够了,因为计算机本身就有跳到任一索引位置的能力。

所以,数组的读取是一种非常高效的操作,因为它只要一步就好。一步自然也是最快的速度。这种一步读取任意索引的能力,也是数组好用的原因之一。

O(1)

查找

查找就是检查它是否包含某个值,如果包含,还得给出其索引。

逐个格子去检查的做法,就是最基本的查找方法——线性查找。

一个N格的数组,其线性查找的最多步数是N(N可以是任何自然数)。

O(N)

插入

往数组里插入一个新元素的速度,取决于你想把它插入到哪个位置上。

假设要在的末尾插入。那么只需一步。因为计算机知道数组开头的内存地址,也知道数组包含多少个元素,所以可以算出要插入的内存地址,然后一步跳到那里插入就行了。

但在数组开头或中间插入,就另当别论了。这种情况下,我们需要移动其他元素以腾出空间,于是得花费额外的步数。 最低效(花费最多步数)的插入是插入在数组开头。因为这时候需要把数组所有的元素都往右移。 一个含有N个元素的数组,其插入数据的最坏情况会花费N+1步。即插入在数组开头,导致N次移动,加上一次插入。

O(N)

删除

数组的删除就是消掉其某个索引上的数据。

跟插入一样,删除的最坏情况就是删掉数组的第一个元素。因为数组不允许空元素,当索引0空出,那么剩下的所有元素都要往左移去填空。 对于含有N个元素的数组,删除操作最多需要N步。

O(N)

参考:数据结构与算法图解.1

猜你喜欢

转载自www.cnblogs.com/ooo0/p/12162034.html
今日推荐