【发布时间】:2019-10-30 08:57:22
【问题描述】:
我需要对链表和二叉树作为存储和搜索数据的结构的优缺点进行评估。但是我有点迷失了优点和缺点可能是什么?
任何帮助都将不胜感激,谢谢!
【问题讨论】:
我需要对链表和二叉树作为存储和搜索数据的结构的优缺点进行评估。但是我有点迷失了优点和缺点可能是什么?
任何帮助都将不胜感激,谢谢!
【问题讨论】:
让我们考虑一下链表的工作原理与二叉树的工作原理
对于双向链表,我们有像
Head < - > 5 < - > 10 < - > 4 < - > tail
如果我们想添加一个元素,我们可以通过将新元素指向端点和端点指向的值,然后将这两个元素都更新为指向新元素(确保正确分配上一个和下一个) 我已经在这里掩盖了它,但是如果您搜索插入到链表中,有很多很好的资源可用。此操作具有 O(1) 时间复杂度。对插入(平衡)二叉树进行一些研究,这将花费更长的时间
现在搜索呢?在上面的链接列表中,如果我想找到一个元素,我必须从一侧遍历整个列表,直到达到我想要的值。这会导致 O(n) 时间复杂度,但是如果我们有一个平衡的二叉树,我们可以检查我们正在寻找的内容是高于还是低于中间的 ~ 值。如果它更高,我们可以消除数字的下半部分。然后我们可以对剩余的数字执行相同的步骤。这将每一步的剩余数字量减少了约一半,并显着减少了时间。
有很多方法可以评估这一点,它们取决于不同的实现。我对你的建议是选择你想要关注的每个实现比较操作的时间复杂度,然后考虑替代实现以及它们对操作时间复杂度的作用。
对于二进制考虑平衡和不平衡。
对于链表,请查看双向链接、单链接、有和没有指向尾部的指针(本质上是堆栈与队列)
如果您对具体实现以及它们的比较方式有任何疑问,请告诉我们,我们会尽力解决。
【讨论】: