Sebastian Gomez
Vamos a explorar el fascinante mundo de las listas enlazadas circulares en Go. 🔄💻 ¡Prepárate para embarcarte en una emocionante aventura llena de historia, código, ejemplos y desafíos! 🎉🤖
Las listas enlazadas circulares son una evolución de las listas enlazadas simples y doblemente enlazadas que ya hemos explorado en artículos anteriores. 🌱🔗 La idea de las listas enlazadas circulares surgió en los años 60 con la intención de aprovechar al máximo la memoria y los recursos disponibles en los sistemas de aquella época. 🕰️💾
En una lista enlazada circular, el último nodo apunta al primer nodo, creando un ciclo infinito. 🔄 Esto puede ser útil en ciertos casos de uso que veremos más adelante. ¡Ahora, sumerjámonos en el maravilloso mundo de Go! 🏊♂️💙
package main
import "fmt"
type Node struct {
value int
next *Node
}
type CircularLinkedList struct {
head *Node
tail *Node
size int
}
func (c *CircularLinkedList) Add(value int) {
newNode := &Node{value: value}
if c.head == nil {
c.head = newNode
c.tail = newNode
newNode.next = c.head
} else {
c.tail.next = newNode
newNode.next = c.head
c.tail = newNode
}
c.size++
}
func (c *CircularLinkedList) Display() {
if c.size == 0 {
fmt.Println("La lista está vacía")
return
}
temp := c.head
for i := 0; i < c.size; i++ {
fmt.Printf("%d -> ", temp.value)
temp = temp.next
}
fmt.Println()
}
func main() {
cll := &CircularLinkedList{}
cll.Add(1)
cll.Add(2)
cll.Add(3)
cll.Display()
}
Esta implementación utiliza una estructura Node para representar cada nodo de la lista y una estructura CircularLinkedList para gestionar la lista enlazada circular. 🌐👩💻 Implementamos el método Add para agregar elementos y el método Display para mostrar la lista. 😄✅
Las listas enlazadas circulares son especialmente útiles en situaciones en las que necesitamos una estructura de datos circular. Algunos casos de uso incluyen:
Ahora que conocemos algunos casos de uso, exploremos un ejemplo en Go para que todo quede más claro. 🤓🎯
Ejemplo: Rotación de elementos en una lista enlazada circular
func (c *CircularLinkedList) Rotate(k int) {
if c.size == 0 {
return
}
k = k % c.size
if k == 0 {
return
}
current := c.head
count := 1
for count < k && current != nil {
current = current.next
count++
}
kthNode := current
for current.next != c.head {
current = current.next
}
current.next = c.head
c.head = kthNode.next
kthNode.next = c.tail
c.tail = kthNode
}
func main() {
cll := &CircularLinkedList{}
cll.Add(1)
cll.Add(2)
cll.Add(3)
cll.Add(4)
cll.Add(5)
cll.Display()
cll.Rotate(2)
cll.Display()
}
En este ejemplo, implementamos el método Rotate para rotar los elementos de la lista enlazada circular. 💫🔄 Cuando ejecutamos el programa, veremos cómo los elementos se rotan correctamente. 😃🎉
📝🏋️♂️ 10 ejercicios para practicar 🏋️♂️📝
¡Es hora de poner en práctica tus habilidades! Aquí tienes una lista de 10 ejercicios para que practiques con listas enlazadas circulares en Go. 🤸♂️💡
🌟🤗 ¡No olvides compartir tus soluciones! 🤗🌟
Te invitamos a dejar la solucioón como un Pull requeste a este repositorio: Go Para Principiantes. ¡Me encantaría ver cómo abordas estos desafíos y aprender juntos! 🌱👨💻
Recuerda que la práctica hace al maestro, así que no dudes en experimentar, cometer errores y aprender de ellos. ¡Sigue adelante, valiente programador! 💪🚀
Esperamos que este artículo sobre listas enlazadas circulares en Go te haya resultado útil y emocionante. 🎊🎈 No olvides revisar nuestro blog regularmente para descubrir más aventuras en el mundo de la programación. ¡Hasta la próxima! 👋💻🌈
Hemos explorado el interesante mundo de las listas enlazadas circulares en Go, aprendiendo sobre su historia, casos de uso y ejemplos. Además, hemos visto cómo implementar y utilizar una lista enlazada circular en Go mediante una estructura Node y una estructura CircularLinkedList. Las listas enlazadas circulares son una herramienta poderosa y versátil que se adapta a una amplia gama de aplicaciones. No olvides poner en práctica tus habilidades resolviendo los 10 ejercicios propuestos y compartiendo tus soluciones con nuestra comunidad. 🌟🚀
Creador de contenido principalmente acerca de tecnología.