【发布时间】:2010-12-31 19:13:06
【问题描述】:
我最近遇到了一些 PHP-SPL 数据结构,我一直在研究第一个,the doubly linked list。我大概知道什么是链表,现在我可以看到什么是双向链表,但我的问题是:我到底该怎么处理这个?
我似乎使用数组同样容易。一些计算机科学类型可以启发我吗?
【问题讨论】:
-
我完全同意你的怀疑。
标签: php data-structures
我最近遇到了一些 PHP-SPL 数据结构,我一直在研究第一个,the doubly linked list。我大概知道什么是链表,现在我可以看到什么是双向链表,但我的问题是:我到底该怎么处理这个?
我似乎使用数组同样容易。一些计算机科学类型可以启发我吗?
【问题讨论】:
标签: php data-structures
与单链表不同,双向链表可以沿任一方向遍历链表,并在 O(1) 的时间内在链表中间进行对象插入和删除(前提是您已经可以访问链表中的点)与单链表不同,它将发生在哪里。也就是说,双链表在其他方面较差,而且在实践中绝对不会经常遇到。
【讨论】:
选择合适的数据结构并不一定是什么对你来说容易,而是什么使用更少的内存并且对机器来说更快。在双向链表的情况下,当您需要在任一方向迭代、以恒定速度插入任何位置但不需要随机访问时,它会很有用。
现在鉴于在 PHP 中您通常使用小型数据集,您不必太担心这类事情。而且,如果您正在处理大型数据集,最好用 C 编写代码。因此,您不太可能从 PHP 中的此类结构中受益到需要使用它们的程度。
但可能存在“介于两者之间”的区域,在该区域中,使用其中一种 Spl 数据结构确实会降低内存使用量,足以使其值得使用。 (我做了一个简单的测试,一个数组中的 1M 个整数需要 200MB。双链表需要 150MB。迭代它们的时间非常可比。)
【讨论】:
恕我直言,在野外遇到这样的事情的可能性不大,除非您在像 Google 或 Facebook 这样的公司工作,他们正在处理大量数据并且有需求 优化列表遍历以允许删除和添加节点。根据经验,如果您的应用程序那么很慢,那么您很可能在其他地方做错了(我知道这不是您的问题,但我想我会把它扔进去;)) .
对于具有中小型数据需求的中小型网站,我会说一个数组就足够了(更不用说普通 Web 开发人员更具可读性和可理解性了 ;))。
【讨论】: