- 数组:
- 数组存放的所有元素在内存中是相连的(一块内存空间)
- 添加新元素的速度会很慢(因为元素相连,增加元素的时候如果没有了空间需要重新申请内存空间全部转移元素)
- 随机读取元素时,数组的效率很好,因为可以很快的找到索引位置
- 链表:
- 链表中的元素可存储在内存的任何地方(每个元素存储了下一个元素的地址)
- 添加元素很容易
- 在需要读取链表最后一个元素的时候,不能直接读取,因为不知道它所处的地址,必须先访问第一个元素,从中获取第二个元素的地址,以此类推直到访问最后一个元素,所以效率很低
- 需要同时读取所有元素时,链表的效率很好
- 散列表:
- 散列函数:将输入映射到数字
- 必须是一致的
- 将不同的输入映射到不同的数字
- 冲突:两个输入映射到的数字相同,
- 处理冲突:如果两个键映射到了一个位置,那么就在这个位置存储一个链表
- 避免冲突:
- 较低的填装因子,良好的散列函数。
- 填装因子度量的是散列表中有多少位置是空的,填装因子越低发生冲突的可能性越小。
- 广度优先搜索:
- 解决最短路径问题的算法被称为广度优先搜索。
- 可回答两类问题:
- 从节点a出发有前往节点b的路径吗
- 从节点a出发前往节点b的那条路径最短
- 运行时间O(V+E)V为顶点数,E为边数
- 图:
- 模拟一组连线
- 有向图和无向图
- 由节点和边组成
- 一个节点可能与众多节点相连,这些节点称为邻居
- 树:
- 树是一种特殊的图
- 队列:
- 先进先出FIFO
- 栈:
- 后进先出LIFO