演算法這個專欄主要是基於js來寫的,意與學習前端的同學分享自己的學習成果。
前端的小夥伴們,是不是也有這樣的感覺。我們前端js裡面的陣列好像是不定長的呀!我們感覺在js中陣列是不定長的,實際上,它的底層是定長的。只不過它的長度達到一定長度之後,js引擎幫我們實現自動擴容了。
那麼,js引擎幫我們向作業系統去申請空間來實現擴容,那麼我們可以不管了嗎?
不行,擴容的過程是會消耗效能的。
好的程式設計師,在使用陣列前,可以先判斷使用的陣列要多長,事先打好提前量,在使用陣列的過程中不會出現擴容的情況。
擴容是怎麼實現的?
(記憶體的分配都是作業系統給分配的。如果我們就問作業系統要一塊指定位置的空間,它不一定會給我們;我要問他要一塊連續的多長的空間,它是會給我們的)
如果我們陣列長度為8個,要在新增乙個資料,它可能就會建立乙個新的長度為16的陣列(作業系統的引擎會打好提前量,說你8個長度的存不下了,就多給你一點,看看你能不能存下,所以可能會自動幫我們劃分乙個16的長度),然後把我們原先的那8個資料給複製過來,(這個過程又分配記憶體,又複製資料,消耗效能),然後在把第9給數給新增進去。
所以,我們在使用陣列時,最好時先預估要多長的陣列。
陣列的特性:
1.儲存在物理空間上時連續的。
2.底層的陣列長度是不可變的。(js中的陣列是因為js引擎給做了優化)
3.陣列的變數,指向了陣列第乙個元素的位置
陣列的優點:
1.查詢資料效能好。指向查詢某個位置,沒有任何資料結構可以和陣列相比(a[1], a[4]……)
陣列的缺點:
1.因為空間必須得是連續的,所以如果陣列比較大,當系統的空間碎片較多的時候,容易存不下。(所以,宣告陣列時要避免陣列太大)
空間碎片(這裡不展開講)
2.因為陣列的長度是固定的,所以陣列的內容難以被新增和刪除(被刪除的資料的那塊空間,由後面的資料往前移來填補,所以也是會消耗效能的)
資料結構之陣列
陣列的考點 1.二維陣列元素位址計算 三維陣列中元素個數的計算 選擇題 2.廣義表的基本概念 會求表尾 表頭,填空題 3.矩陣的壓縮儲存 壓縮儲存的目的 對稱矩陣壓縮儲存後的大小,填空題 針對考點,一一擊破。哈哈哈。第一部分 首先,二維陣列元素位址計算。注 只要知道以下三要素便可隨時求出任一元素的位...
資料結構之 陣列
陣列是線性表,就是資料排成像一條直線一樣的結構,除了陣列,鍊錶,佇列,棧都是線性結構 而非線性表就是二叉樹,堆,圖等,資料之間不是簡單的先後關係。陣列有連續的記憶體空間和相同型別的資料。正式有了這兩個限制,才有了乙個堪稱殺手鐗的特性 隨機訪問 但是刪除,插入乙個資料,為了保證連續性,就需要做大量的資...
資料結構之 陣列
陣列是由相同型別的元素的集合所組成的資料結構並且是分配一塊連續的記憶體來儲存。利用元素的索引 index 可以計算出該元素對應的儲存位址。一維陣列就是最簡單的陣列,就像 int data 二維陣列實質就是儲存的一維陣列,就像 int data 大於等於二維的陣列就叫多維陣列。需要初始化空間大小,並且...