在C中,您可以创建自己的结构,然后从中创建一个链表,该结构中的记录将指向下一个记录以及上一个记录。
Perl是否一定有办法做到这一点?很想知道如何。
谢谢
答案 0 :(得分:6)
您不会经常看到Perl程序员创建诸如链表之类的东西。您可能需要阅读perllol和perldsc来查找更典型的“ Perlish”数据结构。
话虽如此,您可以查看LinkedList::Single的源代码,以了解在Perl中编写单链接列表的一种方法。
答案 1 :(得分:6)
基本上可以像在C中一样执行此操作,但是使用references instead of pointers和散列代替结构。
但是在Perl中通常不必这样做,因为Perl的内置数组非常聪明且快速。它们会自动增长,并且已经完成了链表的大部分工作,例如使用splice
添加和删除任意元素,以及使用pop
,{{1}添加和删除数组的正面和背面},push
和shift
。而且,与链接列表不同,您可以获得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编写的链接列表库。但这不是最容易使用的东西。