J'essaye d'écrire un programme pour sérialiser une liste chaînée dans un fichier sans utiliser de bibliothèque. Mon problème est comment ajouter ou enlever des noeuds à la structure sérialisée puisque je n'ai pas le prochain pointeur? Aussi, comment puis-je éviter la fragmentation?Besoin d'aide pour la sérialisation
Répondre
Si votre liste liée ne comporte pas de boucles, le fait qu'il s'agisse d'une "liste liée" est un détail de la mémoire et non un détail de sérialisation. Notez simplement les valeurs des noeuds dans le fichier et créez les pointeurs next
lorsque vous désérialisez. Toutefois, si votre liste liée contient, alors vous aurez besoin de quelque chose de plus intelligent. Vous devrez stocker les pointeurs next
en tant que décalages de fichier vers le noeud (ou quelque chose de similaire) pour encoder le "lien".
Pour chaque noeud de votre liste chaînée, stockez deux mots. Le premier est les données, le second est le décalage du nœud next
. Voici une illustration de la liste liée circulairement:
+-> 1234 -> 5678 -> 2398 -+
| |
+-------------------------+
0 : 4bytes: 1234 : int data <------------+
4 : 4bytes: 8 : offset of next node -+ |
| |
8 : 4bytes: 5678 : int data <----------+ |
12 : 4bytes: 16 : offset of next node -+ |
| |
16 : 4bytes: 2398 : int data <----------+ |
20 : 4bytes: 0 : offset of next node ---+
@mousey: Vous pouvez les trier avant la sérialisation. En règle générale, vous ne voulez pas que vos routines de sérialisation modifient vos données. En d'autres termes, vous voulez 'A == Deserialize (Serialize (A))'. Si vous commencez à changer l'ordre des éléments, vous avez des problèmes. – Stephen
@Stephen Si j'ajoute un nouvel élément qui doit être trié. ai-je besoin de désérialiser toute la liste pour ajouter un nouvel élément? – mousey
@mousey: Probablement. Mais, typiquement, vous ne sérialiser (et désérialiser) chaque fois que vous ajoutez un élément à une liste. Vous devez généralement le sérialiser pour l'envoyer sur le réseau, le stocker sur disque, etc. Vous pouvez choisir un format différent si la propriété triée (et le réencodage constant) est importante - lors de l'écriture, ajoutez toujours à l'arrière du fichier et gardez-le trié lorsque vous le relisez. – Stephen
- 1. Sérialisation des Winforms MDI pour la persistance
- 2. Besoin de recommandation pour la bibliothèque de sérialisation d'objet en C++
- 3. Utilisation de WebClient pour la sérialisation JSON?
- 4. Pourquoi avons-nous besoin sérialisation en service web
- 5. Problème lors de la sérialisation
- 6. Besoin d'aide avec un bon design pour beaucoup à une relation avec sérialisation XML en C#
- 7. Bibliothèque de sérialisation C++ prenant en charge la sérialisation partielle?
- 8. Sérialisation binaire pour framework compact 3.5
- 9. Comment ajouter des attributs pour la sérialisation C# XML
- 10. Classes GWT: une annotation pour empêcher la sérialisation d'un champ?
- 11. Sérialisation XML pour les classes Groovy
- 12. Comment référencer la sérialisation JSON dans ClassLibrary?
- 13. La sérialisation XML est lente
- 14. Problème lié à la sérialisation
- 15. Question sur la sérialisation XML
- 16. sérialisation XML en utilisant boost :: sérialisation
- 17. Protocole tampon mieux que la sérialisation?
- 18. Livre sur la sérialisation .Net?
- 19. Sérialisation de la classe STL
- 20. Modifier les données lors de la sérialisation
- 21. Comment implémenter la sérialisation xml pour les types personnalisés?
- 22. La sérialisation de java.util.Vector est-elle sûre pour les threads?
- 23. Attribut personnalisé pour passer la sérialisation de propriété à NetDataContractSerializer
- 24. Comment personnaliser la sortie de sérialisation XML pour Object?
- 25. Sérialisation d'objet pour annuler/rétablir la fonctionnalité Java
- 26. Octet pour la sérialisation des octets d'une structure en C#
- 27. Pickle Python Sérialisation
- 28. C++ Boost sérialisation sérialisation templated classes dérivées
- 29. nouvel ensemble lors de la sérialisation
- 30. Sérialisation de la conception en C#
J'essaie de sérialiser une structure de liste liée. Quelqu'un peut-il m'aider à faire cela. Aucune bibliothèque externe s'il vous plaît. La sérialisation devrait fonctionner pour ajouter des nœuds et supprimer des nœuds dans les fichiers. Aussi comment convertir une struture en binaire, puis à une liste liée. (aussi il y a des "prochains" pointeurs). Aussi dans quel format dois-je le stocker afin que mon fichier puisse enregistrer plusieurs listes liées. – mousey
@mousey: nous avons dépassé ce point :) Que ne comprenez-vous pas de notre discussion? – Stephen
@Stephen Je n'ai pas eu le format de le stocker. Si je veux stocker une liste liée impliquant des données int. Ai-je besoin de stocker la valeur comme {int valeur et offset de fichier de la structure suivante?) Ou Comment puis-je maintenir le format de structure dans le fichier – mousey