链表>
— , , , , ( ) , , .
并非所有工业语言都内置了对链表作为数据结构的支持。但是,将其自己实现为类或结构并不难。为了方便地使用相关算法,我们将在Hi语言的基本定义中添加内置的双向链接列表。
首先,让我们创建实验列表的实例:
VAR list = <"I", "will", "be">
在上面的示例中,为三个节点自动创建了双向链接。
Hi中的链接的非空列表始终具有一个当前或“活动”节点。默认情况下,这是最后添加的元素,现在为“ be”。让我们检查一下:
PRINT list.current # "be"
让我们在列表中再添加两个元素:
list.insert "back", "!" # list : "I", "will", "be", "back", "!"
内置的insert方法会在活动节点之后立即添加新元素,自动建立新链接并使最后添加的元素成为当前元素(您可以使用insertFirst方法添加第一个元素并使其成为新的列表节点)。
对于当前元素,删除以类似的方式进行:
list.remove 1 # list : "I", "will", "be", "back"
但是,您可以一次删除几个元素,为此,您必须首先将指针设置为要删除的第一个节点:
VAR secList = list
secList.prev 2
secList.remove 2 # secList : "I", "back"
在这种情况下,被删除的节点之前的前一个节点将成为当前节点。如果删除列表的第一个元素,则新的第一个元素将成为当前元素。
您只需将新值分配给元素,即可将当前节点替换为另一个节点:
secList.urrent = "smile" # secList : "smile ", "back"
您可以删除所有节点,即可以使列表为空,如下所示:
secList = <>
转到第一个和最后一个节点很方便,如下所示:
list.first
LET last = list.last #
因此,您可以使用该列表轻松执行各种操作:
PRINT list # "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list