Bueno, he estado usando el buscador para ver qué encuentro sobre listas enlazadas. Y lo que he leído me ha confundido, más que aclararme la forma en que debería hacer una lista.
En C, recuerdo que hacía algo que se supone que en Bennu debería escribir así:
TYPE tp_nodo
tp_caca dato;
tp_nodo*sgte;
END
(tp_caca es un tipo cualquiera ::) )
Luego, creaba algunas funciones para agregar y quitar nodos, buscar un dato en una lista, buscar una posicion en la lista, etc etc.
Ya no recuerdo bien, pero para agregar un nodo usaba un alloc(sizeof(tp_nodo)), para eliminar usaba free(), y en general ese tipo de trabajo hacía.
Ahora, leyendo los temas que vi en el buscador, encontré varias formas un poco diferentes de la que yo acabo de exponer, tambien se hablaba de una funcion realloc, y otras cosillas.
Alguien me podría explicar qué está pasando? O al menos, decirme si mi forma de usar listas enlazadas es funcional aquí en Bennu.
También leí que uno podía luego hacer mención a un nodo de la lista, sólo escribiendolo como sgte[3], por ejemplo.... aunque ya no estoy muy seguro. Esto no se podía hacer en C, me parece.
Alguien que me eche una luz :3 saludos y gracias!
Veo que ya has visto cómo se hace en el código que usé para la lista enlazada se STRINGs.
Básicamente esa es la forma correcta de hacerlo: usas ALLOC para darle memoria a un puntero (creando un nuevo nodo) y le asignas los valores, para buscar un nodo vas recorriendo la lista, y para borrar usas FREE, con cuidado de no olvidar cambiar los valores de los punteros que señalan a dicho nodo. Exactamente igual a como se hacía en C.
No obstante, existe un pequeño "truco" con el que se puede crear un "array" del tipo que quieras, con un tamaño variable, que es el que mencioné en
http://forum.bennugd.org/index.php?topic=988.0
De esta forma es más fácil acceder a los nodos (usando [], como decías), pero para eliminar un nodo intermedio tienes que "mover" todos los datos que hay a continuación (como si fuera un array cualquiera) y "eliminar" (realloc) la última posición.
Son dos formas de hacer lo mismo, con sus puntos fuertes y sus pegas, pero como siempre, es mejor hacerlo como te sea más cómodo hasta que aprendas lo suficiente para poder elegir.
Todo claro. Muchísimas gracias. Karma++; ;D