Estructura de datos: lista enlazada circular
La lista enlazada circular es una variación de la lista enlazada en la que el primer elemento apunta al último elemento y el último elemento apunta al primer elemento. Tanto la lista enlazada individualmente como la lista enlazada doblemente se pueden convertir en una lista enlazada circular.
Lista enlazada individualmente como circular
En la lista enlazada individualmente, el siguiente puntero del último nodo apunta al primer nodo.
Lista doblemente enlazada como circular
En la lista doblemente enlazada, el siguiente puntero del último nodo apunta al primer nodo y el puntero anterior del primer nodo apunta al último nodo haciendo circular en ambas direcciones.
Según la ilustración anterior, los siguientes son los puntos importantes que deben considerarse.
El siguiente enlace del último enlace apunta al primer enlace de la lista en ambos casos, tanto de lista individual como doblemente enlazada.
El anterior del primer enlace apunta al último de la lista en el caso de una lista doblemente enlazada.
Operaciones básicas
A continuación se presentan las operaciones importantes respaldadas por una lista circular.
insert - Inserta un elemento al principio de la lista.
delete - Elimina un elemento del inicio de la lista.
display - Muestra la lista.
Operación de inserción
El siguiente código demuestra la operación de inserción en una lista enlazada circular basada en una lista enlazada única.
Ejemplo
insertFirst(data):
Begin
create a new node
node -> data := data
if the list is empty, then
head := node
next of node = head
else
temp := head
while next of temp is not head, do
temp := next of temp
done
next of node := head
next of temp := node
head := node
end if
End
Operación de eliminación
El siguiente código demuestra la operación de eliminación en una lista enlazada circular basada en una lista enlazada única.
deleteFirst():
Begin
if head is null, then
it is Underflow and return
else if next of head = head, then
head := null
deallocate head
else
ptr := head
while next of ptr is not head, do
ptr := next of ptr
next of ptr = next of head
deallocate head
head := next of ptr
end if
End
Operación de la lista de visualización
El siguiente código demuestra la operación de la lista de visualización en una lista enlazada circular.
display():
Begin
if head is null, then
Nothing to print and return
else
ptr := head
while next of ptr is not head, do
display data of ptr
ptr := next of ptr
display data of ptr
end if
End
Para conocer su implementación en lenguaje de programación C, haga clic aquí .