Ayuda con listas enlazadas
Buenas a todos, comentaros que en clase me han mandado hacer el mantenimiento de un fichero con lista enlazadas y que los datos se guarden en un fichero para que al volverlo a ejecutar, los datos sigan ahí, comentaros que he manejado ficheros binarios, relativos, batch, indexados y estructuras relativas, pero no se que hacer para guardar los datos de una lista enlazada en un fichero, aquí os dejo el código de todo lo que tengo hecho hasta ahora:
Cita:
Salu2 y gracias de antemano. |
una lista enlazada consiste en una serie de registros o estructuras en los que al menos uno de sus campos es un puntero al siguiente registro o estructura siguiendo algún tipo de ordenación, opcionalmente también puede contener un puntero al registro anterior, e incluso otro puntero para otro criterio de ordenación. Eso sería si esos registros estuviesen en la memoria y para cada registro hubieses echo una petición de memoria mediante malloc.
Pero si la lista tiene muchos elementos es mejor mantener esos registros en el disco. Hay dos opciones, que cada registro tenga un tamaño fijo, en tal caso lo normal sería empezar el fichero con una cabecera que nos diga cuantos registros tenemos, un puntero al primer registro válido (el número de registro mas que un puntero), quizás otro para el último, y otro puntero para la lista de registros eliminados para ser reutilizados. Para ir al registro N tendras que hacer un fseek al offset (sizeof(cabecera)+(N-1)*sizeof(registro)), teniendo en cuenta que cada registro, a parte de contener lso datos propios (como el nombre, apellido, dirección, etc.) deberás añadir espacio para almacenar el número del próximo registro y el del anterior (con un int32 te debería sobrar). La cabecera la deberás tener siempre en memoria para agilizar el funcionamiento y deberás grabarla cada vez que sea modificada. En caso de que el tamaño de registro sea variable se complica todo, para empezar cada registro deberá comenzar con un int32 indicando su tamaño, y después los punteros en vez de contener el número de registro tendrás que poner el offset real. Casi es mejor que reserves siempre por ejemplo 50 bytes para campos tipo nombre o dirección y así sea de tamaño fijo |
Buenas kezuzillo, todo lo que me comentas lo he utilizado en los ficheros relativos, es decir, guardar la primera "ficha" como yo la llamo para guardar el numero de registros que tiene el fichero, aparte de datos que quiera guardar, despues de esa "ficha" irían todos los datos pertenecientes al fichero. Siempre he utilizado el fseek para posicionarme en una parte especifica del fichero, y el read o write para leer dichos datos, pero el problema está en la lista enlazada, que como se puede ver, es de tamaño de registro variable, que no se que hacer para guardar esos datos en un fichero, no se como utilizar el fseek en este tipo de ficheros, ni siquiera se como leer y grabar en listas enlazadas, ya que nisiquiera lo he visto, y es este mi problema.
Espero que hayas entendido cual es mi problema. Un saludo y gracias. |
esta en c++...
|
Cita:
post anterior seis años...ojo. |
menudo reflote.
|
La franja horaria es GMT +2. Ahora son las 14:14. |
Powered por vBulletin™ Version 3.8.10
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.
Traducido por vBsoporte - vBulletin en español
ZackYFileS - Foros de Debate