Supprime le 1er elemnt de la liste en C
stroumpf
Messages postés
289
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
je programme en C,e et je rencontre un probleme :
quelqun peut m'aider à developper une fonction qui supprime le 1er elemnt de la liste( table dehachage)
je sais pas faire pour supprimer le 1er elemnt dela liste chaine
merci
je programme en C,e et je rencontre un probleme :
quelqun peut m'aider à developper une fonction qui supprime le 1er elemnt de la liste( table dehachage)
je sais pas faire pour supprimer le 1er elemnt dela liste chaine
typedef struct c{ int pos; int nl; struct c *suivant; }Coordonnees; typedef struct L{ char mot[50]; Coordonnees *c; struct L *suivant; }Liste;
merci
A voir également:
- Supprime le 1er elemnt de la liste en C
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Message supprimé whatsapp - Guide
- Liste déroulante en cascade - Guide
- Liste code ascii - Guide
5 réponses
tu fais c=c->suivant
ou L*l->suivant
attention, ceci ne désaloura pas la memoire, pour desalouer la memoire, utilises une variable temporaire
L maliste
L *temp=maliste->suivant;
delete L;
maliste=temp
ou L*l->suivant
attention, ceci ne désaloura pas la memoire, pour desalouer la memoire, utilises une variable temporaire
L maliste
L *temp=maliste->suivant;
delete L;
maliste=temp
je vais te l expliquer avec des mots, ce sera plus simple.
ta liste chainée est composée de maillons. toi tu veux supprimer le premier maillon de la chaine.
tu as un pointeur qui pointe sur ton premier maillon, puis le premier pointe sur le deuxieme, etc...
tu crée un pointeur, du meme type que les maillons de ta chaine (si c est une chaine de coordonnées, tu fais un pointeur que tu apelles temp, de types coordonnées*. Ca donne "coordonnées *temp".
tu donne a ce pointeur la valeur de ton premier maillon:
temp=premiermaillon (attention, sans etoiles, car te ne copies pas du contenu, mais les adresse memoires !!!
ensuite, tu deplace ton pôinteur qui indiquait l emplacement de ton premier maillon vers le deuxime maillon.
genre: machaine=machaine->next;
donc ta liste chainée commence maintenant au 2 eme maillon, plus rien ne pointe sur le premier maillon dans la chaine. Il ne te reste plus que le maillon temp qui sais ou sotn ces données.
ensuite tu invoque la suppression de données. En c+ c'est delete pour desalouer la memoire. En C, c'est free(temp)
voila. J estpere que le commentire est plus clair que du code.
ta liste chainée est composée de maillons. toi tu veux supprimer le premier maillon de la chaine.
tu as un pointeur qui pointe sur ton premier maillon, puis le premier pointe sur le deuxieme, etc...
tu crée un pointeur, du meme type que les maillons de ta chaine (si c est une chaine de coordonnées, tu fais un pointeur que tu apelles temp, de types coordonnées*. Ca donne "coordonnées *temp".
tu donne a ce pointeur la valeur de ton premier maillon:
temp=premiermaillon (attention, sans etoiles, car te ne copies pas du contenu, mais les adresse memoires !!!
ensuite, tu deplace ton pôinteur qui indiquait l emplacement de ton premier maillon vers le deuxime maillon.
genre: machaine=machaine->next;
donc ta liste chainée commence maintenant au 2 eme maillon, plus rien ne pointe sur le premier maillon dans la chaine. Il ne te reste plus que le maillon temp qui sais ou sotn ces données.
ensuite tu invoque la suppression de données. En c+ c'est delete pour desalouer la memoire. En C, c'est free(temp)
voila. J estpere que le commentire est plus clair que du code.
merci Nabla.
mais là avec mon code je confonds,
je c pas comment faire
?
un tableau ????????, une liste ?????????
je confonds.
merci de m'aider
mais là avec mon code je confonds,
include <stdlib.h> #include <string.h> #include "table_hash.h" #define TAILLEHASH 307 int main(void) { // Declaration des variables int a; FILE *F; // Descripteur du fichier texte char mot[100]; // variable utilisée pour stocker le mot en cours de lecture int i; // variable utilisée lors du parcours de la TableHash unsigned int cle,pt; // variables pour stocker les cles du mot en cours et la clé du caractère '.' char *temp; // variable pour stocker le mot en cours de lecture char c; // ?? Liste **TableHash; // tableau de liste TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *)); // allocation en memoire du tableau for(i=0;i<TAILLEHASH;++i) // Initialisation des TableHash[i] = NULL;
je c pas comment faire
?
un tableau ????????, une liste ?????????
je confonds.
merci de m'aider
Salut à tous,
Jai un probleme qui me bloque:
jai une table de hachage chainé: un tableau de liste chainé
voilà sa declaration :
bon je possede aussi d'une liste qui contient les séquence des mots (la table de hachage contient les mot, ainsi leurs coordonnées).
Bon jai une fonction elaguer2seq: dui parcoure la table de hachage, aisi la liste des séquence, et verfief si chaque mot de la liste est inclus dans la séquencedes mots et est cequil ets bien le dernier mot de l'ensemble desmots qui constituent la sequencedes mots.
cette fonction de verification c'est la fonction "chercher_mot" qui renvoie la valeur 1 si le motverifie bien la condition.
si le mots verifie la fonction: il est inclus dans la séquence des mots etquil est à la derniere position, on le supprime de la table de hachage.
Ben moi je bloque danns cette fonction de suppression dela table, comment faire?????????
Aidez moi SVP
je comptesur vous.merci
Jai un probleme qui me bloque:
jai une table de hachage chainé: un tableau de liste chainé
#ifndef TABLE_HASH #define TABLE_HASH typedef struct c{ int pos; int nl; struct c *suivant; }Coordonnees; typedef struct L{ char mot[50]; Coordonnees *c; struct L *suivant; }Liste;
voilà sa declaration :
Liste **TableHash; // tableau de liste TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *)); // allocation en memoire du tableau for(i=0;i<TAILLEHASH;++i) // Initialisation des TableHash[i] = NULL; // pointeurs contenus dans le tableau
bon je possede aussi d'une liste qui contient les séquence des mots (la table de hachage contient les mot, ainsi leurs coordonnées).
Bon jai une fonction elaguer2seq: dui parcoure la table de hachage, aisi la liste des séquence, et verfief si chaque mot de la liste est inclus dans la séquencedes mots et est cequil ets bien le dernier mot de l'ensemble desmots qui constituent la sequencedes mots.
cette fonction de verification c'est la fonction "chercher_mot" qui renvoie la valeur 1 si le motverifie bien la condition.
si le mots verifie la fonction: il est inclus dans la séquence des mots etquil est à la derniere position, on le supprime de la table de hachage.
Ben moi je bloque danns cette fonction de suppression dela table, comment faire?????????
Aidez moi SVP
je comptesur vous.merci
void elaguer2seq(Liste *L, Liste **TableHash) { Liste *p; Liste *q; char *mot; int i=0; int a; printf(" seq : %s\n",L->mot); //printf("TableHash : %s\n",TableHash[1]->mot); for ( i=0;i<TAILLEHASH;i++) { for(p=L;p!=NULL;p=p->suivant){ if(TableHash[i] != NULL) //printf("TableHash : %s\n",TableHash[i]->mot); if (chercher_mot(TableHash[i]->mot,p->mot)==0) printf("%s","condition vérifiée"); free(TableHash[i]) ;// supprimer mot i=i++; // supprimerMot(p->mot); AfficherTableHash(TableHash); } }
Liste *maillon_temp;
maillon_temp=TableHash[i];
TableHash[i]=TableHash[i]->suivant
Free(maillon_temp);
pour inffo, le code que tu m a donné ne remplie pas la liste chainée.. il faudra donc la remplir ;)
maillon_temp=TableHash[i];
TableHash[i]=TableHash[i]->suivant
Free(maillon_temp);
pour inffo, le code que tu m a donné ne remplie pas la liste chainée.. il faudra donc la remplir ;)
Salut Nabla's,
Jai un probleme qui me bloque:
jai une table de hachage chainé: un tableau de liste chainé
bon je possede aussi d'une liste qui contient les séquence des mots (la table de hachage contient les mot, ainsi leurs coordonnées).
Bon jai une fonction elaguer2seq: dui parcoure la table de hachage, aisi la liste des séquence, et verfief si chaque mot de la liste est inclus dans la séquencedes mots et est cequil ets bien le dernier mot de l'ensemble desmots qui constituent la sequencedes mots.
cette fonction de verification c'est la fonction "chercher_mot" qui renvoie la valeur 1 si le motverifie bien la condition.
si le mots verifie la fonction: il est inclus dans la séquence des mots etquil est à la derniere position, on le supprime de la table de hachage.
Ben moi je bloque danns cette fonction de suppression dela table, comment faire?????????
Aidez moi SVP
je comptesur vous.merci
Jai un probleme qui me bloque:
jai une table de hachage chainé: un tableau de liste chainé
#ifndef TABLE_HASH #define TABLE_HASH typedef struct c{ int pos; int nl; struct c *suivant; }Coordonnees; typedef struct L{ char mot[50]; Coordonnees *c; struct L *suivant; }Liste; voilà sa declaration : Liste **TableHash; // tableau de liste TableHash = (Liste **) malloc (TAILLEHASH * sizeof(Liste *)); // allocation en memoire du tableau for(i=0;i<TAILLEHASH;++i) // Initialisation des TableHash[i] = NULL; // pointeurs contenus dans le tableau
bon je possede aussi d'une liste qui contient les séquence des mots (la table de hachage contient les mot, ainsi leurs coordonnées).
Bon jai une fonction elaguer2seq: dui parcoure la table de hachage, aisi la liste des séquence, et verfief si chaque mot de la liste est inclus dans la séquencedes mots et est cequil ets bien le dernier mot de l'ensemble desmots qui constituent la sequencedes mots.
cette fonction de verification c'est la fonction "chercher_mot" qui renvoie la valeur 1 si le motverifie bien la condition.
si le mots verifie la fonction: il est inclus dans la séquence des mots etquil est à la derniere position, on le supprime de la table de hachage.
Ben moi je bloque danns cette fonction de suppression dela table, comment faire?????????
Aidez moi SVP
je comptesur vous.merci
void elaguer2seq(Liste *L, Liste **TableHash) { Liste *p; Liste *q; char *mot; int i=0; int a; printf(" seq : %s\n",L->mot); //printf("TableHash : %s\n",TableHash[1]->mot); for ( i=0;i<TAILLEHASH;i++) { for(p=L;p!=NULL;p=p->suivant){ if(TableHash[i] != NULL) //printf("TableHash : %s\n",TableHash[i]->mot); if (chercher_mot(TableHash[i]->mot,p->mot)==0) printf("%s","condition vérifiée"); free(TableHash[i]) ;// supprimer mot i=i++; // supprimerMot(p->mot); AfficherTableHash(TableHash); } }
tu crees un pointeur temporaire pointant sur le maillon a supprimer,
tu prends ton pointeur qui pointe sur le maillon a supprimer, et tu lui dit de se positionner sur maillon->suivant
et ensuite tu fais free(pointeur temporaire)
je suis desolé, si tu comprends pas ce que je dis, c'est peut etre que je m exprimes mal, peut etre que tu ne lis pas avec assez d attention, mais je ne peux faire mieu.
bon courrage
tu prends ton pointeur qui pointe sur le maillon a supprimer, et tu lui dit de se positionner sur maillon->suivant
et ensuite tu fais free(pointeur temporaire)
je suis desolé, si tu comprends pas ce que je dis, c'est peut etre que je m exprimes mal, peut etre que tu ne lis pas avec assez d attention, mais je ne peux faire mieu.
bon courrage
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
je sais pas faire pour supprimer le 1er elemnt dela liste chaine
c'est fait pour ;-))
http://www.commentcamarche.net/faq/sujet 7444 liste simplement chainee#1 suppression au debut de la liste
je sais pas faire pour supprimer le 1er elemnt dela liste chaine
c'est fait pour ;-))
http://www.commentcamarche.net/faq/sujet 7444 liste simplement chainee#1 suppression au debut de la liste
jai une table de hachage qui en fait une liste chainée.
SVP tu peux me réecrire le code plus lisible avec la desallocation mémoire.
merci