数据结构与算法 / 数组(Array)
生活随笔
收集整理的這篇文章主要介紹了
数据结构与算法 / 数组(Array)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
@time 2019-07-18
@author Ruo_Xiao
@notice 64位OS
一、基礎知識
1、數組的定義
數組是一種線性表數據結構,它用一組連續的內存空間來存儲一組具有相同數據類型的數據。
2、連續的內存空間和相同的數據類型
這種數據的組織方式,直接導致了數據具有核心特性:隨機訪問。
實現公式(尋址公式)如下:
a[i]_address = a_address + i * type_size通過上述公式,也能夠明白為什么數組的下標為什么從0開始。若從1開始的話,那么上述公式就變成了?
a[i]_address = a_address + (i - 1) * type_size像數組這種編程語言最底層的數據結構,性能必須優化到極致,所以采用了下標從0開始的模式。?
拓展:二維數組的尋址公式為
// 假設二位數組為 m * n a[i][k]_address = a_address + (i * n + k) * type_size二、相關操作
為了保持內存空間的連續性,數組的插入和刪除是低效的,因為操作之后要進行數據遷移。
1、插入
- 插入的位置在隊尾,時間復雜度為 O(1) 。
- 插入的位置在隊首,時間復雜度為 O(n)。
- 平均復雜度,因為插入的位置是隨機的,即:概率相同。所以,平均復雜度為
- 如果對數組的順序沒有要求,那么可以將插入的位置的原數據放入數組末尾,將新數據賦值到該位置,時間復雜度為O(1) 。為 O(1) 的原因是該操作不會隨著數組元素數量的變大而變大,執行的指令數量相同,所以復雜度為 O(1) 。
2、刪除
- 刪除的位置在隊尾,時間復雜度為 O(1) 。
- 刪除的位置在隊首,時間復雜度為 O(n)。
- 平均復雜度為 O(n) 。計算過程參考 “插入”?部分。
- 很多時候,為了追求軟件性能,可以將數組中待刪除的數據標記為已刪除狀態,然后定時對已經刪除的數據進行集中刪除操作,這種思想類似于 JVM 的垃圾回收機制。
? ? ? ? 其實上述操作,在 C++ 中 vector 早已封裝好,所以在 C++ 編程中,推薦使用vector代替數組。當然了,那些對于性能有卓越的追求的領域,數組還是無可替代的。
?
?
(SAW:Game Over!)
總結
以上是生活随笔為你收集整理的数据结构与算法 / 数组(Array)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据结构与算法 / 概念
- 下一篇: 为什么连续申请的两个 int 型变量的地