Tableaux dynamique ou liste chainée ?

cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006 - 4 avril 2005 à 13:02
cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006 - 4 avril 2005 à 15:23
Bonjour,
J'ai écris une petite fonction qui permet d'allouer de la memoire pour créer des tableaux
dynamique.

exemple pour un tableau de structure dynamique:

typedef struct buffer
{
int iEntier;
char * szTexte;
}BUFFER;


BUFFER * pBuffer = NULL;
int iElement = 0;

BUFFER * AllocMem(int iNbElement, BUFFER * pBuffer)
{
if(pBuffer == NULL) //Si le pointeur n'a pas encore été initialisé
{
pBuffer = (BUFFER*) malloc (sizeof (BUFFER));// on alloue de la memoire pour
// le 1er élément avec malloc.

}
else // sinon on alloue de la memoire pour les autres éléments avec realloc.
{
pBuffer = (BUFFER*) realloc (pBuffer, (iNbElement + 1) * sizeof (BUFFER));

}

return pBuffer; // et on renvoie le pointeur
}


void main()
{


pBuffer = AllocMem(iElement, pBuffer);
pBuffer[0].iEntier = 25;
pBuffer[0].szTexte = "Bonjour";
iElement++;

etc....

}

Apparement tout fonctionne correctement, evidemment j'ai pas testé tout les cas de figure
possible. C'est pourquoi je voudrais savoir si cette fonction peut être réellement utilisée sans problème.
Je voudrais aussi savoir quelle est la différence avec une liste chainé au niveau rapidité, efficacité, et utilisation.

Merci pour votre aide.

Tintin 72

2 réponses

ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
4 avril 2005 à 14:37
pBuffer[0].szTexte = "Bonjour";
=> très risqué ça comme init.
Si tu modifie la chaîne pointée ou tu tentes de la détruire, Boom.

Le mieux c'est d'allouer également une chaîne de caractère avec malloc puis de recopier avec strcpy.

comparaison des tableaux dynamique et listes châinée.

Tableaux dynamiques :
- pas de fragmentation des éléments (ils sont à la suite des autres)
- accès rapide à l'élément d'indice i.
- changement de la taille lent si beaoucoup d'éléments (il faut recopier l'ensemble du tableau)

Liste chaînées :
- fragmentation des éléments (un peu partout en mémoire)
- accès lent à l'élément d'indice i (il faut parcourir toute la liste)
- changement de taille rapide (il suffit de bien gérer les maillons prev et next).

Conclusion : tout dépend de l'utilsation du tableau ou de la liste (à savoir comment se feront les accès aux éléments et si la taille va beaucoup évoluée).
0
cs_tintin72 Messages postés 122 Date d'inscription mercredi 16 avril 2003 Statut Membre Dernière intervention 22 juillet 2006
4 avril 2005 à 15:23
Merci pour ces précieux renseignements ;-)

Tintin 72
0
Rejoignez-nous