Lista vinculada>
— , , , , ( ) , , .
Nem todas as linguagens industriais possuem suporte embutido para lista vinculada como estruturas de dados. No entanto, não é difícil implementá-lo sozinho como uma classe ou estrutura. Para um trabalho confortável com algoritmos relevantes, adicionaremos listas vinculadas bidirecionais integradas já na definição básica da linguagem Hi.
Primeiro, vamos criar uma instância de nossa lista experimental:
VAR list = <"I", "will", "be">
No exemplo acima, links bidirecionais são criados automaticamente para três nós.
Uma lista não vazia vinculada em Hi sempre tem um nó, que é atual ou “ativo”. Por padrão, este é o último elemento adicionado, que agora é "ser". Vamos verificar isso:
PRINT list.current # "be"
Vamos adicionar mais dois elementos à nossa lista:
list.insert "back", "!" # list : "I", "will", "be", "back", "!"
O método de inserção integrado adiciona novos elementos imediatamente após o nó ativo, cria automaticamente novos links e torna o último elemento adicionado atual (você pode adicionar e tornar o primeiro um novo nó de lista usando o método insertFirst).
A exclusão é realizada de forma semelhante para o elemento atual :
list.remove 1 # list : "I", "will", "be", "back"
No entanto, você pode excluir vários elementos de uma vez, para isso, você deve primeiro definir o ponteiro para o primeiro nó a ser excluído :
VAR secList = list
secList.prev 2
secList.remove 2 # secList : "I", "back"
Nesse caso, o nó anterior antes do excluído se torna o atual. Se o primeiro elemento da lista for excluído, o novo primeiro elemento se tornará o atual .
Você pode substituir o nó atual por outro simplesmente atribuindo um novo valor ao elemento:
secList.urrent = "smile" # secList : "smile ", "back"
Você pode excluir todos os nós, ou seja, pode tornar a lista vazia assim:
secList = <>
É conveniente ir para o primeiro e último nós da seguinte maneira:
list.first
LET last = list.last #
Assim, você pode realizar facilmente várias operações com a lista:
PRINT list # "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list