insert 数组_数据结构——数组

d1f828d3b2369234cbc8d7a554438661.png

数据结构——数组

数组基础

数组就是码成一排进行存放,即顺序存储。

7d57acac2743194033f9d221567aa146.png

索引是数组的一个重要的概念。数组的索引语意在 HashTable 有经典的应用。

cc91c5b5a997e0c620a4ea3c4c6e3438.png

制作自己的数组类

基于 C++ 提供的静态数组进行二次封装,实现一个动态数组。

7fb1e7ce84747f0461aca3dd6a449085.png

增 - add:向数组中添加元素

  • [ ] 向数组末尾添加元素
// 向数组尾部添加 6

09c140fd5a7e0f67be82973275658205.png

4a3474719eed86d19bd53700dc6e56b6.png
  • [ ] 向制定位置添加元素

将 9 插入到索引为 1 的位置。

a29703fc30276e18089c5a3759c229a1.png

先后移腾出位置,然后添加。

1eee26f4befd5cf82bc17363e4efd0ff.png

删 - remove:删除数组中的元素

  • [ ] 删除数组末尾的元素 直接将数组元素个数减 1 。
size

b86f4591bbe8274b1e91fbab603970c3.png
  • [ ] 删除指定索引的元素 前挪,覆盖删除,数组元素个数减 1。

ed29a96a2e94463e459edcb242eb3088.png

改 - set:获取制定索引元素

数组支持直接随机存取,根据索引直接获取元素。

查 - contain:查询数组

顺序查询

使用范型

使用模板,让数据结构可以放置自定义类型的数据。

动态数组

数据已满,仍然需要再插入数据。

c18f02811cadb6fb9c03532ca1f425d0.png

使用动态数组,类似 C++ STL 中的 vector。

void 

数组已满时,插入的策略是,先申请一片容量加倍的空间,然后进行数据拷贝,释放原空间,重新指向新的空间。

bce3e162763c7b70d78459115dec4367.png

当不断从数组中删除元素时,元素个数不断减小,进行缩容操作。同时为了避免在一个点反复扩容和缩容,可以采取当减少到容量的 1/4 时,容量减少为原来的 1/2,即松弛操作。

965be1dbc8b3fb8a14bc97533c4d35da.png

复杂度分析

增 - add

  • [ ] 向数组末尾插入 O(1)
  • [ ] 向数组头插入 O(n) 平时时间复杂度 O(n)。可能会触发扩容和缩容操作。

删 - remove

  • [ ] 删除数组末尾 O(1)
  • [ ] 删除数组头 O(n) 平时时间复杂度 O(n)。可能会触发扩容和缩容操作。

查 - contain

  • [ ] 查询指定索引元素 O(1)

改 - set

修改指定索引元素值 O(1)

实现 my_array

template 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在SystemVerilog(SV)中,合并数组和非合并数组是两种不同的数组类型。 合并数组(Packed Array)是指在数组名之前定义了位宽的数组。合并数组可以被看作是一个连续的比特集合,中间没有闲置的空间。它的每个元素的位宽是相同的,并且数组的大小是在编译时确定的。合并数组的索引方式是先索引是第几个元素,然后再看元素的第几位。例如,bit [7:0] b_unpack 表示一个有3个元素,每个元素的位宽是8的合并数组。可以通过 b_unpack 来索引数组中的元素。 非合并数组(Unpacked Array)是指在数组名之后定义了数组内每个元素的位宽的数组。非合并数组可以被看作是一组独立的数据存储单元。非合并数组的大小也是在编译时确定的。非合并数组的索引方式是先索引是第几个元素,然后再看元素的第几位。例如,bit [7:0] b_unpack 表示一个有3个元素,每个元素的位宽是8的非合并数组。可以通过 b_unpack 来索引数组中的元素。 合并数组和非合并数组都可以用作存储和操作多个数据的数据结构。合并数组适用于需要连续存放数据的场景,而非合并数组则适合需要将数据分解成更小单元的场景。它们在存储方式和索引方式上有所不同,开发者可以根据具体的需求选择合适的数组类型来使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SV之数组类型](https://blog.csdn.net/NJUPTYJS/article/details/130365635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SV学习——数据类型(第二章)](https://blog.csdn.net/weixin_48157494/article/details/125235978)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值