嗨,编程语言:链表

我们继续构建Hi语言今天,我们考虑链表(链表)的内置实现



链表>
— , , , , ( ) , , .



并非所有工业语言都内置了对链表作为数据结构的支持。但是,将其自己实现为类或结构并不难。为了方便地使用相关算法,我们将在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



All Articles