- 秒懂算法:用常識解讀數據結構與算法
- (美)杰伊·溫格羅
- 750字
- 2022-10-08 17:10:05
1.6 插入
向數組中插入數據的效率取決于你想要插入的位置。
如果想在購物清單末尾加上"figs"
,那么只需要1步。
這是由于計算機的另一個特性:在將內存分配給數組時,計算機總是會記錄數組的大小。
因為計算機知道數組的起始內存地址,所以計算數組最后一個元素的內存地址就很簡單了:如果數組開始于內存地址1010,大小是5,那么它的最后一個內存地址就是1014。要在那之后再添加一個元素,只需放到下一個內存地址1015即可。
一旦計算機算出了存儲新值的內存地址,它只需要1步就能完成插入。
下圖展示了在數組末尾插入"figs"
的過程。

不過還有一個問題。因為計算機本來在內存中給數組分配了5個格子,而現在我們又加了一個元素,所以就得再給數組多分配一個格子。在很多編程語言中,這是自動完成的。但每種編程語言的處理方式不同,這里就不詳細介紹了。
以上就是在數組末尾插入元素的過程,但在數組開頭或者中間插入新數據就是另一回事了。在這兩種情況下,必須移動數據,來給要插入的數據騰出空間。這就需要額外步驟。
假設我們要在索引2處插入"figs"
。先來看下圖。

為此,需要向右移動"cucumbers"
、"dates"
和"elderberries"
來給"figs"
騰出空間。這個過程需要多步,因為需要先把"elderberries"
向右移動一個格子,才能移動"dates"
。然后,再移動"dates"
來給"cucumbers"
讓位。下面來詳細看一下這個過程。
第1步:右移"elderberries"
,如下圖所示。

第2步:右移"dates"
,如下圖所示。

第3步:右移"cucumbers"
,如下圖所示。

第4步:最后,在索引2處插入"figs"
,如下圖所示。

注意,在這個例子中,插入需要4步,其中3步是數據右移,剩下1步是插入新值。
向數組開頭插入元素需要步數最多,也就是所謂的最壞情況。這是因為要在數組開頭插入元素,必須把其他所有值都右移一個格子。
對包含N個元素的數組來說,最壞的情況下需要N + 1步插入。這是因為需要移動N個元素,然后才能執行插入操作。
講完插入,終于可以講最后一個操作了,那就是刪除。
- Python機器學習:數據分析與評分卡建模(微課版)
- Redis Applied Design Patterns
- 自己動手實現Lua:虛擬機、編譯器和標準庫
- 羅克韋爾ControlLogix系統應用技術
- Java 9 Programming Blueprints
- Eclipse Plug-in Development:Beginner's Guide(Second Edition)
- 概率成形編碼調制技術理論及應用
- ADI DSP應用技術集錦
- Python Data Analysis Cookbook
- Advanced Express Web Application Development
- CoffeeScript Application Development Cookbook
- Test-Driven Machine Learning
- C語言從入門到精通
- 開源項目成功之道
- FPGA嵌入式項目開發實戰