Hola lenguaje de programación: lista vinculada

Seguimos construyendo el lenguaje Hi . Hoy consideramos la implementación incorporada de una lista vinculada (lista vinculada).



Lista vinculada>
— , , , , ( ) , , .



No todos los lenguajes industriales tienen soporte integrado para listas enlazadas como estructuras de datos. Sin embargo, no es difícil implementarlo usted mismo como clase o estructura. Para trabajar cómodamente con los algoritmos relevantes, agregaremos listas enlazadas bidireccionales integradas que ya están en la definición básica del lenguaje Hi.



Primero, creemos una instancia de nuestra lista experimental:



VAR list = <"I", "will", "be">


En el ejemplo anterior, los enlaces bidireccionales se crean automáticamente para tres nodos.



Una lista vinculada no vacía en Hi siempre tiene un nodo que es actual o "activo". De forma predeterminada, este es el último elemento agregado, que ahora es "be". Revisemos esto:



PRINT list.current  #  "be"


Agreguemos dos elementos más a nuestra lista:



list.insert "back", "!"  #  list  : "I", "will", "be", "back", "!"


El método de inserción incorporado agrega nuevos elementos inmediatamente después del nodo activo, crea automáticamente nuevos enlaces y hace que el último elemento agregado sea actual (puede agregar y convertir el primero en un nuevo nodo de lista utilizando el método insertFirst).



La eliminación se realiza de forma similar para el elemento actual :



list.remove 1  # list  : "I", "will", "be", "back"


Sin embargo, puede eliminar varios elementos a la vez, para esto primero debe establecer el puntero al primer nodo que se eliminará :



VAR secList = list
secList.prev 2
secList.remove 2  # secList   : "I", "back"


En este caso, el nodo anterior antes del eliminado se convierte en el actual. Si se elimina el primer elemento de la lista, el nuevo primer elemento se convierte en el actual .



Puede reemplazar el nodo actual por otro simplemente asignando un nuevo valor al elemento:



secList.urrent = "smile"  # secList  : "smile ", "back"


Puede eliminar todos los nodos, es decir, puede dejar la lista vacía así:



secList = <>


Es conveniente ir al primer y último nodos de la siguiente manera:



list.first
LET last = list.last  #        


Por lo tanto, puede realizar varias operaciones con bastante facilidad con la lista:



PRINT list #  "I", "will", "be", "back"
list.first
list.next
list.insert "not"
LET be = list



All Articles