前端之數據結構(二)

這是我參與8月更文挑戰的第三天,活動詳情查看:8月更文挑戰數組

直接書接上回。markdown

數據結構

數據結構:計算機存儲、組織數據的方式,就像鍋碗瓢盆。數據結構

鏈表

  • 多個元素組成的列表。
  • 元素存儲不連續,用 next 指針連載一塊兒。

image.png

那爲啥不用數組呢?

  • 數組:增刪非首尾元素每每須要移動元素。app

  • 鏈表:增刪非首尾元素,不須要移動元素,只須要更改 next的指針便可。post

  • JavaScript中是沒有鏈表的,可是能夠用 Object模擬鏈表。ui

經過以下代碼,咱們就能夠建造一個簡易的鏈表:url

const a = {val: 1}
const b = {val: 2}
const c = {val: 3}
const d = {val: 4}

a.next = b
b.next = c
c.next = d
複製代碼

結構以下:spa

image.png

那怎麼遍歷鏈表呢?

let p = a;
while (p) {
    console.log(p.val);
    p = p.next
}

// 1
// 2
// 3
// 4
複製代碼

那插入鏈表呢?

很簡單。prototype

const e = { val: '5'}
c.next = e
e.next = d
複製代碼

image.png

這時候咱們就能看到插入的數據了。3d

還有刪除呢?

更簡單了。

c.next = d
複製代碼

image.png

看,已經刪除完了。

原型鏈與鏈表

  • 原型鏈的本質就是鏈表。

  • 原型鏈 上的結點是各類原型對象,好比 Object.prototype, FUnction.prototype

  • 原型鏈經過 __proto__屬性連接各類原型對象,而鏈表經過 next 連接。

那原型鏈長啥樣呢?

image.png

咱們能夠發現,funcarr 是指向本身的原型鏈對象,在指向 Obj 的原型鏈對象。

咱們能夠經過以下代碼,驗證一下原型鏈:

const arr = new Array()
const fun = () => {}
const Obj = new Object()
複製代碼
  • 若是 A 沿着原型鏈能找到 B.prototype, 那麼 A instanceOf Btrue

  • 同上,遍歷原型鏈和遍歷鏈表同樣,

const instanceOf = (A, B) => {
    let p = A
    while (p) {
        if (p === B.prototype) {
            return true
        }
        p = p.prototype
    }
    return false
}
複製代碼

end~~~

相關文章
相關標籤/搜索