一、数组
优点:
- 内存大小固定,
- 操作流程简单,查找数据方便;
缺点:
- 内存要么很大,会浪费内存,要么很小,数据存储空间不够,
- 删除或插入数据比较麻烦;
二、链表
优点:
- 在内存中可以存在任何地方,不要求连续,
- 链表大小不用定义,
- 数据随意增删,增加数据和删除数据很容易。
缺点:
- 查找数据时效率低,因为不具随机访问性,所以访问某个位置的数据都要从第一个数据开始访问,然后根据第一个数据保存的下一个数据的地址找到第二个数据,以此类推。要找到第三 个人,必须从第一个人开始问起。
三、二叉树
特点:
- 左子树的节点值比父亲节点小,而右子树的节点值比父亲节点大。
优点:
- 快速查找,不需要为二叉树预先分配固定的空间,所的元素在树中是排序好的。
缺点:
- 极端情况下,时间复杂度会由O(logn)变成O(n),即变成了一种链式结构。
四、平衡二叉树
特点:
- 具有二叉树的全部特性,每个节点的左子树和右子树的高度差最多为1。
优点:
- 具有二叉树的所有优点,并解决了二叉树的 链式极端情况,时间复杂度保持在O(logn)。
缺点:
- 每次进行插入/删除节点的时候,几乎都会破坏平衡树的规则(每个节点的左子树和右子树的高度差至多等于1 ),每次都需要调整,使得性能大打折扣。
五、红黑树
特点:
- 具有二叉树的特点;
- 根节点是黑色的;
- 叶子节点不存数据;
- 任何相邻的节点都不能同时为红色;
- 每个节点,从该节点到达其可达的叶子节点路径,都包含相同数目的黑色节点。
优点:
- 具有二叉树所有特点,
- 与平衡树不同的是,红黑树在插入、删除等操作,不会像平衡树那样,频繁着破坏红黑树的规 则,所以不需要频繁着调整,减少性能消耗;
缺点:
- 代码复杂
- 查找效率比平衡二叉树低