在C中,您可以创建自己的结构,然后从中创建一个链表,该结构中的记录将指向下一个以及上一个记录。

当然Perl必须有办法做到这一点?很想知道如何。

谢谢

最佳答案

基本上可以像在C中一样执行此操作,但是要使用references instead of pointers和散列而不是结构。

但是在Perl中通常不必这样做,因为Perl的内置数组非常聪明且快速。它们会自动增长,并且已经完成了链表的大部分工作,例如使用splice添加和删除任意元素,以及使用poppushshift从数组的正面和背面添加和删除数组,和unshift。而且,与链接列表不同,您可以获得O(1)随机访问。有关更多信息,请参见perlfunc

您也不要这样做,因为在Perl中编写自己的数据结构往往很慢。 Perl数组是用C编写的,但是您的链表将以慢得多的Perl编写,并消耗更多的内存。尽管该算法可能更有效,但实现速度会很慢。用计算机科学的术语来说,常数将非常大。最终结果是像链表和树这样的专用数据结构只有在您开始接触成千上万个元素时才有意义。

您的另一个选择是使用用C. You can take advantage of C libraries using a thing called XS that acts as a bridge between C code and Perl code编写的链接列表库。但这不是最容易使用的东西。

10-07 15:00