Ver Mensaje Individual
Antiguo 10/04/2010, 22:07   #2
kezuziyo
Zumbao
 
Avatar de kezuziyo
 
Fecha de ingreso: 22/ene/2004
Mensajes: 38.431
kezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatarkezuziyo Cuando busquemos reputación en Wikipedia, saldrá su avatar
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
__________________



>>>FOTO DE LA KEDADA DEL SURESTE 2008<<<
Consejos sobre como navegar por ZackY: Navegando por el foro
>>> [URL="http://www.jezuzillo.es/images/NoToros.htm"]Porque estoy en contra de las corridas de toros y de la existencia de una sección sobre las mismas en este foro[/URL] <<<
>>> [URL="http://foros.zackyfiles.com/showthread.php?t=591397"]Si quieres eliminar la sección taurina de tu navegador, pincha aquí[/URL] <<<
kezuziyo está desconectado
Respuesta rápida a este mensaje
Responder Citando Subir