数据结构与算法第三节:数组的使用

1. 数组的定义

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

(数组的特性: “线性表”, “连续的”, “相同类型”)。

线性表: 就是数据排成像一条线一样的结构。 每个线性表的数据最多只有前和后两个方向。

ps: 数组、链表、队列都是线性表结构。其结构和简单特性如下图所示:

数据结构与算法第三节:数组的使用

ps: 除了线性表,还有非线性表: 二叉树、堆、图等,如下图所示:

非线性表: 在非线性表中,数据之间不是简单的前后关系。

数据结构与算法第三节:数组的使用

  • 数组与链表的区别

数组支持随机访问, 根据下标随机访问的时间复杂度为O(1);
链表适合插入、删除,时间复杂度为O(1);

2. 数组的特性

  • 数组的插入与删除

插入: 可以不将要插入位置的数据放到数组的最后,再将要插入**的数据放到该位置;

删除: 可以先记录已经删除数据的位置, 每次删除操作并不真正搬移数据。当数组没有更多内存空间储存数据时,再触发执行一次真正的删除操作。

  • 警惕数组的访问越界

内存地址 小端模式存放内容 大端模式存放内容
0x4000(低地址) 0x78 0x12
0x4001 0x56 0x34
0x4002 0x34 0x56
0x4003(高地址) 0x12 0x78

小端模式: 低地址存高位 (0x78563412)

大端模式: 低地址存低位(0x12345678)

  • 容器能否完全代替数组

对于业务开发,直接使用容器就足够了,省时省力。毕竟损耗一丢丢性能,完全不会影响到系统整体的性能。

如果你是做一些底层的开发,比如开发网络框架,性能的优化需要做到极致,这个时候数组就会优于容器,成为首选