極客時間算法訓練營2021版

愛分享 愛生活 加油 2021

什麼是鏈表?

鏈表是由一組節點組成的集合。數據結構

  • 實現ide

    咱們設計的鏈表包含兩個類。Node類用來表示節點,LinkedList類提供了插入節點、刪除節點、顯示列表元素的方法,以及一些輔助方法。this

    • Node類spa

      Node類包含連個屬性:element用來保存節點上的數據,next用來保存指向下一個節點的連接。操作系統

      class Node {
        constructor (element) {
          this.element = element
          this.next = null
        }
      }
  • LinkedList類設計

    class LinkedList {
        constructor () {
          this.head = new Node('head')
        }
        // 查找節點
        find (item) {
          let currNode = this.head
          while (currNode.element != item) {
            currNode = currNode.next
          }
          return currNode
        }
        // 插入
        insert (newElement, item) {
          let newNode = new Node(newElement)
          let current = this.find(item)
          newNode.next = current.next
          current.next = newNode
        }
        // 顯示鏈表中的元素
        display () {
          let currNode = this.head
          while (currNode.next !== null) {
            console.log(currNode.next.element)
          }
          currNode = currNode.next
        }
        // 刪除
        remove () {
    
        }
      }
  • 雙向鏈表code

    每個節點有一個previous指向前一個節點隊列

  • 循環鏈表進程

    建立的時候須要element

    this.head.next = this.head

    插入元素以後,鏈表的末端指向鏈表的頭部。



什麼是隊列?

隊列是一種列表,不一樣的是隊列只能在隊尾插入元素,在隊首刪除元素。隊列是一種先進先出的數據結構。

  • 用途:

    • 提交操做系統執行的一系列進程、打印任務池、一些仿真系統用隊列來模擬銀行或雜貨店裏排隊的顧客。
  • 實現

class Queue {
    constructor () {
      this.dataStore = []
    }
    // 向隊尾添加一個元素
    enqueue (element) {
      this.dataStore.push(element)
    }
    // 向隊首刪除一個元素
    dequeue () {
      return this.dataStore.shift()
    }
    // 讀取隊首的元素
    front () {
      return this.dataStore[0]
    }
    // 讀取隊尾的元素
    back () {
      return this.dataStore[this.dataStore.length - 1]
    }
  }
相關文章
相關標籤/搜索