推广 热搜: csgo  vue  angelababy  2023  gps  新车  htc  落地  app  p2p 

数组 | 自问你知道数组为什么从 0 开始起始吗?

   2023-07-09 网络整理佚名1630
核心提示:比如要想在数组中删除、插入一个数据,为了保证连续性,就需要做大量的数据搬移工作。(数组支持随机访问,根据下标随机访问的时间复杂度为O(1)。1、在数组末尾插入元素,不需要移动数据,最好时间复杂度为O(1)。在数组开头插入元素,所有的数据都需要依次往后移动一位,最坏时间复杂度是O(n)。2、删除数组末尾的数据,最好情况时间复杂度为O(1)。删除开头的数据,则最坏情况时间复杂度为O(n)。

全文共2050字,阅读全文大约需要3.2分钟。

前言

前面说过,守望者记得

具有挑战性的算法和编程

设立明星公众号或贴顶公众号!

数组的结构实在是无话可说,但是今天看了极客时间的一篇专栏,感觉自己对数组的了解还不够。我写了一篇总结,正好是之前推荐这门课程的时候,我在这里讨论了内容

第一个问题是数组是从0开始编号的,但是我们有没有想过为什么是从0而不是1开始呢? 我们都从1开始数。好吧,那我们带着这个问题继续往下看。 问题在最后得到解答。

文本

1、如何实现随机访问?

数组(Array)是一种线性表数据结构。 它使用一组连续的内存空间来存储一组相同类型的数据。

1.线性表:线性表是一种数据像线一样排列的结构。 每个线性表上的数据最多有前后两个方向。

(常见的线性表结构:数组、链表、队列、栈等)

非线性表:二叉树、堆、图等。

2.连续的内存空间和相同类型的数据。

特点:“随机访问”。 但它使得数组上的许多操作效率非常低。 例如,如果要删除或插入数组中的一条数据,为了保证连续性,需要做大量的数据移动。

(数组支持随机访问,基于下标的随机访问时间复杂度为O(1)。)

2.“插入”和“删除”效率低下

1、在数组末尾插入元素,不移动数据,最佳时间复杂度为O(1)。

在数组开头插入元素时,所有数据都需要依次向后移动一位,最差时间复杂度为O(n)。

每个位置插入元素的概率相同,平均时间复杂度为(1+2+...n)/n=O(n)。

2.删除数组末尾的数据,最好情况时间复杂度为O(1)。

从一开始就删除数据,最坏情况时间复杂度是O(n)。

平均情况时间复杂度也是 O(n)。

(很多时候我们并不是想死记硬背某个数据结构或者算法,而是要学习其背后的思维和处理技巧,这些东西才是最有价值的。)

3.警惕数组访问越界

给你举个例子看看下面程序的输出结构是什么

int main(int argc, char* argv[]){
    int i = 0;
    int arr[3] = {0};
    for(; i<=3; i++){
        arr[i] = 0;
        printf("hello world\n");
    }
    return 0;
}

你可以复制试试,不同的编译器可能不一样。

不仅仅是三行“hello world”,而是无限循环“hello world”! 这是什么原因呢?

主要原因是我们的代码有错误。 我们定义的数组大小是3,数组是arr[0],arr[1],arr[2],这三种类型的循环我们是i

 
反对 0举报 0 收藏 0 打赏 0评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报
Powered By DESTOON