zoukankan      html  css  js  c++  java
  • 基础数据结构:数组

    基础数据结构:数组

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

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

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

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

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

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

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

    读取

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

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

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

    O(1)

    查找

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

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

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

    O(N)

    插入

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

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

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

    O(N)

    删除

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

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

    O(N)

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

  • 相关阅读:
    iOS开发之ImageView复用实现图片无限轮播
    IOS 通过脚本自动打包工具 webfrogs/xcode_shell
    (iOS)判断GPS坐标是否在中国
    如何轻松实现iOS9多任务管理器效果(iCarousel高级教程)
    有了Auto Layout,为什么你还是害怕写UITabelView的自适应布局?
    PID控制算法的C语言实现四 增量型PID的C语言实现
    PID控制算法的C语言实现三 位置型PID的C语言实现
    PID控制算法的C语言实现二 PID算法的离散化
    PID控制算法的C语言实现一 PID算法原理
    人生是一个连续的过程,没什么东西能影响人的一生,怎么选择不是问题。问题是每天都要努力 (转)
  • 原文地址:https://www.cnblogs.com/ooo0/p/12162034.html
Copyright © 2011-2022 走看看