隊(duì)列Queue
先進(jìn)先出FIFO的數(shù)組
例如實(shí)現(xiàn)餐廳叫號(hào)取號(hào)
點(diǎn)擊取號(hào)生成一個(gè)號(hào)碼
點(diǎn)擊叫號(hào)顯示請(qǐng)X號(hào)就餐
const btnCreateNumber = document.querySelector("#createNumber");
const btnCallNumber = document.querySelector("#callNumber");
const spanNewNumber = document.querySelector("#newNumber");
const spanQueue = document.querySelector("#queue");
const divScreen = document.querySelector("#screen");
const queue = [];
let number = 0;
btnCreateNumber.onclick = () => {
number += 1;
queue.push.call(queue, number); // 等價(jià)于 queue.push(number)
spanNewNumber.innerText = number;
spanQueue.innerText = JSON.stringify(queue);
};
btnCallNumber.onclick = () => {
const n = queue.shift.call(queue); // 等價(jià)于 queue.shift()
// if n === undefined 沒(méi)處理
divScreen.innerText = `請(qǐng) ${n} 號(hào)就餐`;
spanQueue.innerText = JSON.stringify(queue);
};
- 首先選擇隊(duì)列queue作為數(shù)據(jù)結(jié)構(gòu)
- queue.push 為入隊(duì)
- queue.shift 為出隊(duì)
棧Stack
后進(jìn)先出LIFO的數(shù)組
例如JS函數(shù)的調(diào)用棧cll stack就是一個(gè)棧
假設(shè)f1調(diào)用了f2,f2調(diào)用了f3
那么f3結(jié)束后應(yīng)該回到f2,f2結(jié)束后應(yīng)該回到f1
function f1(){let a = 1; return a+f2()}
function f2(){let b = 2; return b+f3()}
function f3(){let c = 3; return c}
f1()
鏈表Linked List
類似對(duì)象原型鏈钦扭,就是鏈表
let array = [1,2,3]
array.__proto__ === Array.prototype
Array.prototype.__proto__ === Object.prototype
可以對(duì)節(jié)點(diǎn)進(jìn)行增刪改查
哈希表
key-value pairs
以key:value的形式組成的數(shù)組肮雨,例如:
name:'shigure',
age:18
樹(shù)Tree
一個(gè)鏈多個(gè)
類似中國(guó)的省市區(qū)睹限,公司的層級(jí)結(jié)構(gòu)啄寡,網(wǎng)頁(yè)中的節(jié)點(diǎn)窍箍,都是一棵樹(shù)
let tree=createTree(value)
let node=createNode(value)
addChild(tree,node)
removeChild(node1,node2)
travel(tree)