美文网首页
数据结构与算法(二)数组

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

作者: 0胡杨0 | 来源:发表于2020-03-05 18:43 被阅读0次

    前言:本文是用来记录自己学习数据结构与算法的笔记,写的不对的地方欢迎指正。

    数组定义

    数组是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据。

    线性表:就是数据排成像一条线一样的结构。每个线性表上的数据最多只有前和后两个方向。其实除了数组,链表、队列、栈等也是线性表结构。
    非线性表:比如二叉树、堆、图等。

    数组的删除和插入

    假设有一个数组,它的长度是n。我们现在要将一个数据插入到数组的第x个位置。那么为了将第x个位置空出来,这个数组需要将x~n这部分的数据全部向后移动一个位置。删除同理。

    数组越界

    在C语言中如果数组越界,根据寻址公式会定位到一块不属于数组的内存地址上,数组越界在C语言中是一种未决行为,编译器是不会报任何错误的。这就会造成程序出现莫名其妙的bug。
    在iOS中如果发生数组越界情况编译器会为我们抛出异常。

    数组容器

    在高级语言中会有很多数组容器,比如OC的可变数组和不可变数组。那么他们都有什么特点呢。

    C数组:
    • 可以存储int等基础类型
    • 不支持动态扩容
    NSArray:
    • 不能存储基础类型
    • 不支持动态扩容
    NSMutableArray:
    • 不能存储基础类型
    • 支持动态扩容
    • 但是动态扩容是需要消耗性能的,所以尽量初始化数组的时候指定数组长度。

    寻址公式

    假设有一个长度为n的数组,里面的数据类型为int,首个元素的内存地址是1000,那么求第k个元素的内存地址:
    address_k = first_address + k * data_size = 1000 + k * 4;

    为什么数组从0开始计数

    1,因为第一个人就是这么干的。
    2,使用寻址公式计算下标和偏移的时候方便。

    相关文章

      网友评论

          本文标题:数据结构与算法(二)数组

          本文链接:https://www.haomeiwen.com/subject/npnqrhtx.html