zoukankan      html  css  js  c++  java
  • 数组下标为什么是从0开始的,而不是1?

    依稀记得大一开始学习C语言的时候,对于数组下标从0开始这一点是非常别扭难以适应的,感觉这就是反人类的设计。直到今天才了解这背后为什么这样设计的原理。
    为了解释清楚这个原因,我们来认识数组的相关特性,据此来探索它底层的一些东西。

    随机访问

    为什么数组能支持随机访问呢,我们先来看看数组专业定义。数组( Array )是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据
    这里有几个关键词,我们来分别仔细解释一下:

    • 线性表:按线性结构存储,数组,链表,队列,栈都是经典的线性表
    • 连续内存空间和相同数据类型:真是因为有这两个限制才会有随机访问这个性质的。 我们来看看int类型长度为10的数组在内存中是如何存储的。假设起始地址为1000

    我们要把握一个最基本的原则,计算机去获取某个变量,本质都是去它对应的内存读取,所以必须要先获取对应的内存地址。

    上面就是具体的计算公式,至此我们可以明白数组为什么支持随机访问了。

    一些常见的错误

    1、数组适合查找,查找的时间复杂度是O(1)
    这种说法其实是不准确的。其实就算是排序好的数组,用二分查找,复杂度都为O(logn)。准确表达是,数组是支持下标机访问。时间复杂度O(1)

  • 相关阅读:
    HDU5029--Relief grain (树链剖分+线段树 )
    codeforces 277.5 div2 F:组合计数类dp
    FZU2176---easy problem (树链剖分)
    Codeforces Round #277.5 (Div. 2) --E. Hiking (01分数规划)
    FZU 11月月赛D题:双向搜索+二分
    POJ
    POJ
    HDU 4746 Mophues(莫比乌斯反演)
    BZOJ 2005 能量采集 (莫比乌斯反演)
    BZOJ 2301 Problem b (莫比乌斯反演+容斥)
  • 原文地址:https://www.cnblogs.com/linshuhui/p/10068403.html
Copyright © 2011-2022 走看看