Listes chainnes aide

Fermé
omaro5552 Messages postés 19 Date d'inscription jeudi 28 mars 2013 Statut Membre Dernière intervention 23 mars 2014 - 7 avril 2013 à 23:09
 Utilisateur anonyme - 11 avril 2013 à 17:11
Bonjour,
je veut construire un programme qui ajoute une chaine de caractere a une liste 10 fois apres il affiche cet chaine de caractere
ensuite il cherche la chaine de caractere s'il elle existe alors le resultat c'est l'adresse de la 1er valeur parcouru ...et si ellle existe pas le resultat est NILL
VOICI MON PROGRAMME
J'AI UN PROBLEME DANS LA FONCTION RECHERCHER
#include <stdio.h>
#include <stdlib.h>
//**************************************************************//


struct element
{
char val[50];
struct element *next;

};
typedef struct element element;



//*************************************************************//


element* ajouterEnTete(element *liste, char* valeur)
{
/* On crée un nouvel élément */
element* nouvelElement = malloc(sizeof(element));

/* On assigne la valeur au nouvel élément */
strcpy(nouvelElement->val,valeur);

/* On assigne l'adresse de l'élément suivant au nouvel élément */
nouvelElement->next = liste;

/* On retourne la nouvelle liste, i.e. le pointeur sur le premier élément */
return nouvelElement;
}

//*******************************************************************//
element* rechercherElement(element* liste,char* valeur)
{
element *tmp=liste;
/* Tant que l'on n'est pas au bout de la liste */
while(tmp != NULL)
{
if(tmp->val == valeur)
{
/* Si l'élément a la valeur recherchée, on renvoie son adresse */
return tmp;
}
tmp = tmp->next;
}
return NULL;
}


//********************************************************************//

element* ajouterEnFin(element* liste,char* valeur)
{
/* On crée un nouvel élément */
element* nouvelElement = malloc(sizeof(element));

/* On assigne la valeur au nouvel élément */
strcpy(nouvelElement->val,valeur);

/* On ajoute en fin, donc aucun élément ne va suivre */
nouvelElement->next = NULL;

if(liste == NULL)
{
/* Si la liste est videé il suffit de renvoyer l'élément créé */
return nouvelElement;
}
else
{
/* Sinon, on parcourt la liste à l'aide d'un pointeur temporaire et on
indique que le dernier élément de la liste est relié au nouvel élément */
element* temp=liste;
while(temp->next != NULL)
{
temp = temp->next;
}
temp->next = nouvelElement;
return liste;
}
}

//**********************************************************************
void afficherListe(element *liste)
{
element* tmp = liste;
/* Tant que l'on n'est pas au bout de la liste */
while(tmp != NULL)
{
/* On affiche */
printf("%s", tmp->val);
/* On avance d'une case */
tmp = tmp->next;
}
}


//*******************************************************************//



int main()
{
element* ma_liste = NULL;
element* ma_liste2=NULL;
int i,m;

char chaine[20];
scanf("%s",&chaine);
for(i=1;i<=10;i++)
{
//
ma_liste = ajouterEnTete(ma_liste,chaine);
// ma_liste = ajouterEnFin(ma_liste,chaine);
}
afficherListe(ma_liste);
printf("\n");
ma_liste2=rechercherElement(ma_liste,chaine);
afficherListe(ma_liste2);
//supprimerListe(ma_liste); // Libère les ressources, nous verrons cette fonction plus tard.

return 0;

}
//*************************************************************************//




A voir également:

1 réponse

Utilisateur anonyme
11 avril 2013 à 17:11
salut

ca fait quelques temps que je n'ai pas fais de c, mais de mémoire il serai plus judicieux d'utiliser

if(strcmp(tmp->val ,valeur)==0) 


que


if(tmp->val == valeur) 


dis moi ce que ca donne.

naga
0