栈
栈是一种遵从后进先出(LIFO)原则的有序集合。新添加的或待删除的元素都保存在栈的同一端,称作栈顶,另一端就叫栈底。在栈里,新元素都靠近栈顶,旧元素都接近栈底。
数组实现栈
const stack = []
stack.push(1) //入栈
stack.pop() //出栈
队列
队列是遵循FIFO(First In First Out,先进先出,也称为先来先服务)原则的一组有序的项。队列在尾部添加新元素,并从顶部移除元素。最新添加的元素必须排在队列的末尾,如排队核酸酸。
数组实现队列
const queue = []
queue.push(1)//入队
queue.shift()//出队
链表
链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的。每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成。
链表数据结构
interface LinkedList{
value:any
next:LinkedList | null
}
树
树,是一种有序的层级结构。每个节点下面有若干个子节点,例如常见的DOM树。
interface ITreeNode{
data:any
children:ITreeNode[] | null
}
二叉树
二叉树中的节点最多只能有两个子节点:一个是左侧子节点,另一个是右侧子节点。 二叉搜索树(BST)是二叉树的一种,但是它只允许你在左侧节点存储(比父节点)小的值, 在右侧节点存储(比父节点)大(或者等于)的值。
interface IBinaryTreeNode{
data:any
left:IBinaryTreeNode | null
right:IBinaryTreeNode[] | null
}
树的遍历
先序遍历:根-左-右
中序遍历:左-根-右
后序遍历:左-右-根