数据结构 Note-FrontEnd-21

139 阅读1分钟

数据结构的相关知识,内容包括队列、栈、链表、哈希表、树、数据结构的简单。

一、队列 Queue

「先进先出 FIFO」的数组

举例: 一个餐厅叫号功能,点击「取号」按钮生成一个号码,点击「叫号」按钮显示「请 X 号就餐」

代码: 首先选择队列 queue 作为数据结构,queue.push 为入队 / queue.shift 为出队

const divScreen = document.querySelector('#screen')
const btnCreateNumber = document.querySelector('#createNumber')
const btnCallNumber = document.querySelector('#callNumber')
const spanNewNumber = document.querySelector('#newNumber')
const spanQueue = document.querySelector('#queue')

let n =0
let queue = []
btnCreateNumber.onclick = ()=>{
    n +=1
    // queue.push()
    queue.push.call(queue,n)
    spanNewNumber.innerText = n
    spanQueue.innerText =JSON.stringify(queue)
}
btnCallNumber.onclick = ()=>{
    if (queue.length === 0){return}
    let m = queue.shift.call(queue)
    spanQueue.innerText = JSON.stringify(queue)
    divScreen.innerText = `请${m}号就餐`
}

二、栈 Stack

「后进先出 LIFO」的数组

举例: JS 函数的调用栈 call stack 就是一个栈,假设 f1 调用了 f2,f2 又调用了 f3,那么 f3 结束后应该回到 f2,f2 结束后应该回到 f1

代码:

function f1(){let a = a; return a+f2()}
function f2(){let b = 2; return b+f2()}
function f2(){let c = 3; return c}
f1()

三、链表 Linked List

一个链一个

举例:

date: 1
next: #124
——————————
date: 2
next: #241
——————————
date: 3
next: null

实际使用:

let array = [1,2,3]
array.__proto__ === Array.prototype
Array.protype.__proto__ === Object.prototype

链表的变形

  1. 双向链表:每个节点有一个 previous 指向上一个节点
  2. 循环链表:最后一个节点的 next 指向头节点

四、哈希表 key-value pairs

多个对多个

哈希表的难点在于哈希二字(不是嘻哈),这里有一篇文章有兴趣可以看看 →「哈希表」是什么?

五、树 Tree

一个链多个

实际使用: 中国的省市区、公司的层级结构、网页中的节点都可以看成一棵树

代码:

let tree = createTree(value)
let node = createNode(value)
addChild(tree,node)
removeChild(node1,node)
travel(tree)

六、数据结构的简单

它的简单在于它的每一句话你都看得懂,但合起来看不懂

「资料来源:©饥人谷」