数据结构——数组
数组基础
数组就是码成一排进行存放,即顺序存储。
索引是数组的一个重要的概念。数组的索引语意在 HashTable 有经典的应用。
制作自己的数组类
基于 C++ 提供的静态数组进行二次封装,实现一个动态数组。
增 - add:向数组中添加元素
- [ ] 向数组末尾添加元素
// 向数组尾部添加 6
- [ ] 向制定位置添加元素
将 9 插入到索引为 1 的位置。
先后移腾出位置,然后添加。
删 - remove:删除数组中的元素
- [ ] 删除数组末尾的元素 直接将数组元素个数减 1 。
size
- [ ] 删除指定索引的元素 前挪,覆盖删除,数组元素个数减 1。
改 - set:获取制定索引元素
数组支持直接随机存取,根据索引直接获取元素。
查 - contain:查询数组
顺序查询
使用范型
使用模板,让数据结构可以放置自定义类型的数据。
动态数组
数据已满,仍然需要再插入数据。
使用动态数组,类似 C++ STL 中的 vector。
void
数组已满时,插入的策略是,先申请一片容量加倍的空间,然后进行数据拷贝,释放原空间,重新指向新的空间。
当不断从数组中删除元素时,元素个数不断减小,进行缩容操作。同时为了避免在一个点反复扩容和缩容,可以采取当减少到容量的 1/4 时,容量减少为原来的 1/2,即松弛操作。
复杂度分析
增 - add
- [ ] 向数组末尾插入 O(1)
- [ ] 向数组头插入 O(n) 平时时间复杂度 O(n)。可能会触发扩容和缩容操作。
删 - remove
- [ ] 删除数组末尾 O(1)
- [ ] 删除数组头 O(n) 平时时间复杂度 O(n)。可能会触发扩容和缩容操作。
查 - contain
- [ ] 查询指定索引元素 O(1)
改 - set
修改指定索引元素值 O(1)
实现 my_array
template