集合相关的数据结构
栈:先进后出(可以理解为一个桶,先放进去的最后才拿出来)
队列:先进先出(类似一条水管)
数组:查询快,增上慢
查询快:
数组的地址是连续的,我们通过数组的首地址可以找到数组,通过数组的索引可以快速查找某一个元素
增删慢:
数组的长度是固定的,我们想要增加/删除一个元素,必须创建一个新数组,把源数组复制过来再销毁源数组
链表:查询慢,增删快
查询慢:
链表中地址不是连续的,每次查询元素必须从头开始查询
增删快:链表结构增加或者删除对链表整体没有影响,所以增删快
链表又有两种结构:
单向链表:链表中只有一个链子,不能保证元素的顺序(存储元素和取出元素的顺序有可能不一致)
双向链表:链表中有两条链子,有一条链子是专门记录元素的顺序,是一个有序集合
红黑树
特点:
趋近于平衡树,查询的速度非常的快,查询叶子节点最大次数和最小次数不超过2倍
约束:
- 节点可以是红色或者黑色的
- 根节点是黑色的
- 叶子节点(空节点)是黑色的
- 每个红色的节点的子节点都是黑色的
- 任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同