Supprime le 1er elemnt de la liste en C
Fermé
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
-
6 juil. 2008 à 12:00
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 juil. 2008 à 22:26
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 6 juil. 2008 à 22:26
A voir également:
- Supprime le 1er elemnt de la liste en C
- Liste déroulante excel - Guide
- Recuperer message whatsapp supprimé - Guide
- Liste déroulante en cascade - Guide
- Gertrude a préparé la liste des affaires à prendre pour l'excursion. juliette a modifié cette liste en utilisant le mode suivi des modifications proposé par le traitement de texte. - Guide
- Liste de diffusion whatsapp - Guide
5 réponses
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
6 juil. 2008 à 12:11
6 juil. 2008 à 12:11
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
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
6 juil. 2008 à 17:48
6 juil. 2008 à 17:48
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.
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
6 juil. 2008 à 17:58
6 juil. 2008 à 17:58
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
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
6 juil. 2008 à 18:16
6 juil. 2008 à 18:16
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); } }
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
6 juil. 2008 à 18:15
6 juil. 2008 à 18:15
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 ;)
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
6 juil. 2008 à 18:17
6 juil. 2008 à 18:17
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); } }
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
2
6 juil. 2008 à 18:23
6 juil. 2008 à 18:23
ca afficheune erreur :
[Linker error] undefined reference to `Free'
[Linker error] undefined reference to `Free'
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
>
stroumpf
Messages postés
289
Date d'inscription
mardi 17 juin 2008
Statut
Membre
Dernière intervention
1 mars 2009
6 juil. 2008 à 18:35
6 juil. 2008 à 18:35
Nabla's
Messages postés
18203
Date d'inscription
mercredi 4 juin 2008
Statut
Contributeur
Dernière intervention
28 avril 2014
3 193
6 juil. 2008 à 18:26
6 juil. 2008 à 18:26
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
6 juil. 2008 à 22:26
6 juil. 2008 à 22:26
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
6 juil. 2008 à 12:16
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