![算法零基础一本通(Python版)](https://wfqqreader-1252317822.image.myqcloud.com/cover/51/44510051/b_44510051.jpg)
上QQ阅读APP看书,第一时间看更新
2-3 新数据插入数组
数组结构虽然好用,但是如果要将新数据插入数组或是删除数组元素,则需要较多的时间,本节讲解如何将新数据插入数组。
2-3-1 假设当下有足够的连续内存空间
数组结构虽然好用,但是如果要将新数据插入数组则需要较多的时间,下列是假设有一个内存内含数组x,此数组有5、3、9,3个数据。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P30_46749.jpg?sign=1739976122-IBdzJGCEiiI9eupoYjvlmUdSbPXAlknh-0-60450a4afec56e9614bc67e6e6155bef)
假设现在想要在索引1位置插入一个数据2,数组处理步骤如下:
步骤1
先确定数组有足够的空间容纳新元素。此时内存空间概念图如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P30_46750.jpg?sign=1739976122-MTjh3lOeIacI4sRl5bkdc71RPpEM2zpw-0-b3d5b5bcfaf18e33cdb746d8a0ec9a82)
步骤2
由于新数据要放在x[1]索引位置,所以要先将原x[1]及以后的元素往后移动,下列是移动过程与结果。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P30_46751.jpg?sign=1739976122-TkmLZunAptPAQFZfah5WWel8YZC4L09k-0-7b410e8adc4fda07b06b3124a57e9deb)
下列是另一个元素3的移动过程。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P30_46752.jpg?sign=1739976122-RAzQQkme52oarI1oxxuGDH3Vigo7Omz8-0-407c09c7dd3e0950eaa7fea750e51dd6)
步骤3
将数据2插入索引1位置。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P31_46753.jpg?sign=1739976122-qwO1t9Co8Ktbqkyv9jJyO8JOx9aqVIAs-0-7b84d616dc739a6063cca947ef988e27)
上述在插入数据时,可能要移动所有数组元素,所以时间复杂度是O(n)。
2-3-2 假设当下没有足够的连续内存空间
读者可以想象,有几个朋友相邀去看电影,当坐下来后,有一位新朋友想插入一起坐下看电影,可是当下区间座位有限,这时只好在电影院寻找其他的座位。
假设有一个数组,此数组内含3个数据,此数组内存空间的位置如下:
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P31_46754.jpg?sign=1739976122-KziTIbefEVhuT8vqJAkH4k0cLyS9McNa-0-9af0a713430f2d09b1be6a3b22f71be1)
假设现在想要在索引1位置插入一个数据2,但数组连续空间不足,这时需要向计算机要新的可以容纳数组的连续空间,然后将所有数组内容移至新的内存空间,下列是移动与插入结果。
![](https://epubservercos.yuewen.com/6BDBC6/23721658309542706/epubprivate/OEBPS/Images/Figure-P31_46755.jpg?sign=1739976122-Sprv1M158nojXu6L4FkiGDYyRFSWWVkU-0-d639952c0f684f4a151e8ebbffdeaf22)
在没有足够内存空间时插入数据,可能要移动所有数组元素,所以时间复杂度是O(n)。