日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据结构与算法 / 数组(Array)

發布時間:2024/10/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据结构与算法 / 数组(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)。
  • 平均復雜度,因為插入的位置是隨機的,即:概率相同。所以,平均復雜度為
(1 + 2 + 3 + …… + n) / n = ( n + 1 ) * n / ( 2 * n ) =?(1/2)n + (1/2) = O(n)
  • 如果對數組的順序沒有要求,那么可以將插入的位置的原數據放入數組末尾,將新數據賦值到該位置,時間復雜度為O(1) 。為 O(1) 的原因是該操作不會隨著數組元素數量的變大而變大,執行的指令數量相同,所以復雜度為 O(1) 。

2、刪除

  • 刪除的位置在隊尾,時間復雜度為 O(1) 。
  • 刪除的位置在隊首,時間復雜度為 O(n)。
  • 平均復雜度為 O(n) 。計算過程參考 “插入”?部分。
  • 很多時候,為了追求軟件性能,可以將數組中待刪除的數據標記為已刪除狀態,然后定時對已經刪除的數據進行集中刪除操作,這種思想類似于 JVM 的垃圾回收機制。

? ? ? ? 其實上述操作,在 C++ 中 vector 早已封裝好,所以在 C++ 編程中,推薦使用vector代替數組。當然了,那些對于性能有卓越的追求的領域,數組還是無可替代的。

?

?

(SAW:Game Over!)

總結

以上是生活随笔為你收集整理的数据结构与算法 / 数组(Array)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。