数据结构与算法第三节:数组的使用
1. 数组的定义
数组(Array): 是一种线性表
数据结构,它用一组连续的
内存空间,来储存一组具有相同类型
的数据。
(数组的特性: “线性表”, “连续的”, “相同类型”)。
线性表:
就是数据排成像一条线一样的结构。 每个线性表的数据最多只有前和后两个方向。
ps: 数组、链表、队列都是线性表结构。其结构和简单特性如下图所示:
ps: 除了线性表,还有非线性表: 二叉树、堆、图等,如下图所示:
非线性表:
在非线性表中,数据之间不是简单的前后关系。
- 数组与链表的区别
数组支持随机访问, 根据下标随机访问的时间复杂度为O(1);
链表适合插入、删除,时间复杂度为O(1);
2. 数组的特性
- 数组的插入与删除
插入: 可以不将要插入位置的数据放到数组的最后,再将要插入**的数据放到该位置;
删除: 可以先记录已经删除数据的位置, 每次删除操作并不真正搬移数据。当数组没有更多内存空间储存数据时,再触发执行一次真正的删除操作。
- 警惕数组的访问越界
内存地址 小端模式存放内容 大端模式存放内容
0x4000(低地址) 0x78 0x12
0x4001 0x56 0x34
0x4002 0x34 0x56
0x4003(高地址) 0x12 0x78
小端模式: 低地址存高位 (0x78563412)
大端模式: 低地址存低位(0x12345678)
- 容器能否完全代替数组
对于业务开发,直接使用容器就足够了,省时省力。毕竟损耗一丢丢性能,完全不会影响到系统整体的性能。
如果你是做一些底层的开发,比如开发网络框架,性能的优化需要做到极致,这个时候数组就会优于容器,成为首选
。