陣列(array)是一種線性表資料結構。它用一組連續的記憶體空間,來儲存一組具有相同型別的資料。
解釋一下線性表:
線性表(linear list)。顧名思義,線性表就是資料排成像一條線一樣的結構。每個線性表上的資料最多只有前和後兩個方向。其實除了陣列,鍊錶、佇列、棧等也是線性表結構。
非線性表,比如二叉樹、堆、圖等。之所以叫非線性,是因為,在非線性表中,資料之間並不是簡單的前後關係。
第二個是連續的記憶體空間和相同型別的資料。正是因為這兩個限制,它才有了乙個堪稱「殺手鐗」的特性:「隨機訪問」。但有利就有弊,這兩個限制也讓陣列的很多操作變得非常低效,比如要想在陣列中刪除、插入乙個資料,為了保證連續性,就需要做大量的資料搬移工作。
特別糾正乙個「錯誤」。面試的時候,常常會問陣列和鍊錶的區別,很多人都回答說,「鍊錶適合插入、刪除,時間複雜度 o(1);陣列適合查詢,查詢時間複雜度為o(1)」。
實際上,這種表述是不準確的。陣列是適合查詢操作,但是查詢的時間複雜度並不為o(1)。即便是排好序的陣列,你用二分查詢,時間複雜度也是 o(logn)。
所以,正確的表述應該是,陣列支援隨機訪問,根據下標隨機訪問的時間複雜度為 o(1)。
資料結構和演算法入口:
線性表中資料操作的時間複雜度分析
資料操作的時間複雜度主要由磁碟尋道所消耗的時間所決定,同時在磁碟中通過尋道查詢相應資料所需要的時間又由資料在磁碟中的儲存形式所影響。想要更加透徹的了解時間複雜度問題,就需要對磁碟的儲存原理有乙個清楚認識。所以推薦大家一片詳細講解磁碟原理的部落格,非常nice!影響機械磁碟速度的因素 尋道時間 旋轉延...
複雜度分析 時間複雜度 空間複雜度
執行效率是演算法的乙個重要的考量指標,演算法的執行效率用時間 空間複雜度來衡量。今天我們來學習一下複雜度的分析。通常我們可以通過執行程式來獲得演算法的真正的執行時間,這種方法我們可以稱為事後統計法,但這種方法得到的是具體的資料,測試結果很依賴測試環境,而且受資料規模影像最大。因此,我們需要乙個不需要...
複雜度分析 時間複雜度分析和空間複雜度分析
其實,只要講到資料結構與演算法,就一定離不開時間 空間複雜度分析。而且我個人認為,複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。1.時間複雜度分析 對於剛才羅列的複雜度量級,我們可以粗略地分為兩類,多項式量級和非多項式量級。其中,非多項式量級只有兩個 o ...