記憶體的工作原理
鍊錶存在類似的問題。在需要讀取鍊錶的最後乙個元素時,不能直接讀取,因為不知道它的位址,必須先訪問元素#1,從中獲取元素#2,依次類推。需要讀取所有元素時,鍊錶的效率很高:如果需要跳躍,鍊錶的效率是很低的。
陣列與此不同
假設有乙個陣列,它包含五個元素,起始位址為00,那麼元素#5的位址只需簡單的數**算就可以知道。需要隨機地讀取元素時,陣列的效率很高,因為可迅速找到陣列的任何元素。
陣列的元素帶編號,編號從0而不是從1開始。
元素的位置稱為索引
在中間插入
假設要讓待辦事項按日期排列,在清單末尾新增待辦事項。
如果要根據新增待辦事項的日期將其插入到正確的位置。
使用鍊錶時,插入元素很簡單,只需修改它前面的哪個元素與指向的位址。
而使用陣列時,則必須將後面的元素都往後移。如果沒有足夠的空間,可能還得將整個陣列複製到其他地方!因此,當需要在中間插入元素時,鍊錶是更好的選擇。
刪除
刪除元素時,鍊錶也是更好的選擇,因為只需修改前乙個元素指向的位址即可。而使用陣列時,刪除元素後,必須將後面的元素都向前移。
不同於插入,刪除元素總能成功。如果記憶體中沒有足夠的空間,插入操作可能失敗,但在任何情況下都能夠將元素刪除。
常見的陣列和鍊錶操作執行時間
相對來說陣列用的會更多一些,因為它支援隨機訪問。
有兩種訪問方式:
- 隨機訪問
- 順序訪問
2015阿里秋招其中乙個演算法題(經典)
寫乙個函式,輸入乙個二叉樹,樹中每個節點存放了乙個整數值,函式返回這棵二叉樹中相差最大的兩個節點間的差值絕對值。請注意程式效率 實現方法很簡單,遍歷一遍二叉樹,找出最大最小,一相減就可以求出最大的差值 之前在做題的時候居然寫遞迴的方法求值,後面測試了一下,果然結果不對 只要是非遞迴的的方法遍歷都可以...
PHP 多維陣列根據其中乙個欄位的值排序
思路 獲取其中你需要排序的字段,作為一維陣列 arr,後邊會用來排序多維陣列 data.這裡主要以二維陣列為例,多維陣列也是同樣的思路。data array array price 500 count 40 level 1 array price 600 count 30 level 2 array...
兩個相等的陣列,修改其中乙個怎麼做到不改變另外乙個
方法一 concat 用於連線兩個或多個陣列。該方法不會改變現有的陣列,而僅僅會返回被連線陣列的乙個副本。let arra 1,2,3 let arrb concat arra console.log arra,arrb 1,2,3 1,2,3 如果改變arra,arrb不會改變 arra.spli...