Supprimer un case du tableau en langage C

Fermé
olfachokri Messages postés 1 Date d'inscription vendredi 27 mai 2016 Statut Membre Dernière intervention 27 mai 2016 - 27 mai 2016 à 12:59
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 27 mai 2016 à 21:14
Bonjour,
Dans mon prog,j'ai besoin de supprimer un case du tableau en langage C ; En fait,j'ai un tableau de structure (des noeuds) et je veux supprimer le noeud dont son indice =i tout en décalant les autres noeuds du tableau bien sure après avoir supprimer et renvoyant la nouvelle taille du tableau

Please aidez moi à trouver une solution, comment il faut procéder !!??
A voir également:

2 réponses

pkpkmépkpk Messages postés 341 Date d'inscription samedi 14 mai 2011 Statut Membre Dernière intervention 14 janvier 2018 52
27 mai 2016 à 13:48
Bonjour,

Il faut procéder comme tu as dit.
Par contre, il faut juste prendre conscience qu'on ne "supprime" pas une case d'un tableau : la case est toujours là, c'est juste que son contenu n'a plus de sens.

Du coup, pour "supprimer" la case i tu dois simplement recopier la case i+1 dans la case i, la case i+2 dans la case i+1, etc. jusqu'à la fin du tableau, dont tu considéreras la taille diminuée de 1 à l'issue de ton opération de suppression.

A noter que cette suppression prend du temps, puisqu'il faut recopier tout ce qui est après la case supprimée.
Une autre possibilité est d'ajouter un booléen par case, qui précise si le contenu est valide ou non.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 843
27 mai 2016 à 21:14
Bonjour,

Impossible de supprimer la case d'un tableau.
Une autre possibilité serait d'utiliser un pointeur sur une zone allouée (appelé injustement tableau dynamique). Dans, ce cas, tu pourras faire un realloc() pour rétrécir la taille.

Au vu du besoin, je pense que ce n'est pas le plus adapté. Pourquoi ne pas utiliser une liste doublement chainée ? La suppression se fera en un claquement de doigt.
0