实现一个红绿灯
前几天遇到一道有意思的题目。
大意是用 async 和 await 实现一个红绿灯。红灯停 5s、绿灯 10s、黄灯 3s。
扩展:支持手动切换当前灯的状态
前几天遇到一道有意思的题目。
大意是用 async 和 await 实现一个红绿灯。红灯停 5s、绿灯 10s、黄灯 3s。
扩展:支持手动切换当前灯的状态
说链表我决定还是扯上数组一起,它们都是线性存储结构,区别在于数组在内存
上是连续的,有序的.而链表则是通过节点
内的指针指向下个节点
,最后把所有节点
串起来.就好比数组是长椅
、链表是板凳
;你开辟一个长度为5的数组
好比搬了一个5人坐的长椅
过来,1个人坐是占那么多空间, 5个人坐亦然;链
表则是1个人坐就搬1个板凳,十分灵活. 且如果你现在中间插了一个人. 长椅组
只能去找6人坐的新长椅
了, 板凳组
的只用再搬一个板凳
就好了. 所以链表
的插入成本是O(1).但是数组
也有优势, 即通过标号搜索的成本是O(1),而链表
需要从头(head)开始遍历,成本是O(n)
这里的堆都是二叉堆, 是一种优先队列(priority queue), 但他不是队列那种链式结构, 而是树型结构.
它满足以下两个性质
在一颗二叉树中,若除最后一层外的其余层都是满的,并且最后一层要么是满的,要么在右边缺少连续若干节点,则此二叉树为完全二叉树(Complete Binary Tree)。具有n个节点的完全二叉树的深度为 \(\begin{matrix} log_{2}n+1 \end{matrix}\) 深度为k的完全二叉树,至少有 \(\begin{matrix} 2^{k-1} \end{matrix}\) 个节点,至多有 \(\begin{matrix} 2^{k}-1 \end{matrix}\) 个节点。
它和队列一样只有两个操作
但在这两个操作之后,为了维持上述属性, 还会以下自处理
栈也是一种线性存储结构, 但它只能从栈顶压入, 栈顶弹出数据, 也就是后进先出LIFO(Last In First Out).请和队列(Queue)区分开.
队列也是一种线性存储结构, 但它只能从队尾添加数据, 队头取出数据, 也就是先进先出FIFO(First In First Out). 请和栈(Stack)区分开.
维基(中文)
维基(英文)
算法导论(第三版)第13章
删除理解1
删除理解2
红黑树(RBT)是一种自平衡的二叉搜索树(BST), 首先看BST的定义
二叉查找树,也称有序二叉树(ordered binary tree),或已排序二叉树(sorted binary tree),是指一棵空树或者具有下列性质的二叉树:
如图
在这些基础上再加上以下五条性质
最下面应试还有一层叶子节点(nil), mermaid毕竟是画流程图的, 画树还是有点勉强