所以我正在尝试使用Perl学习链接列表.我正在阅读Jon Orwant的Perl掌握算法.在书中,他解释了如何创建链表.我理解其中的大部分内容,但我只是无法理解NEXT代码片段的倒数第二行中的命令/ index/key .
$list=undef;
$tail=\$list;
foreach (1..5){
my $node = [undef, $_ * $_];
$$tail = $node;
$tail = \${$node->[NEXT]}; # The NEXT on this line?
}
Run Code Online (Sandbox Code Playgroud)
他想在那里做什么?
是$node标量,它存储未命名数组的地址?即使我们解除引用$node,我们也不应该通过索引号引用单个元素,例如(0,1).如果我们NEXT用作键,是$node对哈希的引用?我很迷茫.
用英语简单的东西将受到高度赞赏.
NEXT是一个常量,在脚本的早期声明.它包含一个整数值,表示引用下一个节点的当前节点的成员元素的索引.
在此方案下,每个节点都是一个小型匿名数组.此匿名数组的一个元素包含有效内容,另一个元素包含指向下一个节点的引用.
如果您查看该章中的一些早期示例,您将看到以下声明:
use constant NEXT => 0;
use constant VAL => 1;
Run Code Online (Sandbox Code Playgroud)
所以$node->[NEXT]是同义词$node->[0],它包含对链表链中下一个节点的引用,同时$node->[VAL]是$node->[1]; 存储在当前节点中的值(或有效负载).
我会对您提供的代码段发表评论:
foreach (1..5){
my $node = [undef, $_ * $_]; # Create a new node as an anon array.
# Set the previous node's "next node reference" to point to this new node.
$$tail = $node;
# Remember a reference to the new node's "next node reference" element.
# So that it can be updated when another new element is added on next iteraton.
$tail = \${$node->[NEXT]}; # The NEXT on this line?
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,优秀的书.我有几本算法书籍,这些年后仍然是我的最爱之一.
更新:我同意这本书不是当前惯用的Perl或当前的"最佳实践"Perl的模型,但确实觉得它是一个很好的资源,可以通过Perl了解经典算法的应用.我仍然不时地回顾它.
| 归档时间: |
|
| 查看次数: |
1253 次 |
| 最近记录: |