前端面试需要知道的数据结构

250 阅读1分钟

栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。

数组实现栈
const stack  = []
stack.push(1) //入栈
stack.pop() //出栈

栈.png

队列

队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾,如排队核酸酸。

数组实现队列
const queue = []
queue.push(1)//入队
queue.shift()//出队

队列.png

链表

链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。

链表数据结构
interface LinkedList{
    value:any
    next:LinkedList | null
}

链表.png

树,是一种有序的层级结构。每个节点下面有若干个子节点,例如常见的DOM树。

interface ITreeNode{
    data:any
    children:ITreeNode[] | null
}

DOM树结构.png

二叉树

二叉树中的节点最多只能有两个子节点:一个是左侧子节点,另一个是右侧子节点。 二叉搜索树(BST)是二叉树的一种,但是它只允许你在左侧节点存储(比父节点)小的值, 在右侧节点存储(比父节点)大(或者等于)的值。

interface IBinaryTreeNode{
    data:any
    left:IBinaryTreeNode | null
    right:IBinaryTreeNode[] | null
}

二叉树.png

树的遍历

先序遍历:根-左-右

image.png

中序遍历:左-根-右

image.png

后序遍历:左-右-根

image.png