[langage C] probleme dans les Listes en C

Fermé
miss_master - 1 mars 2007 à 12:08
azamharir Messages postés 8 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 4 juin 2007 - 4 mars 2007 à 01:36
Bonjour tout le monde

je suit des etudes en informatique et je me bloque sur un truc dans la promogammation le langage C.
on deux proffes un de td et un de cour et chau'un a fait differement une fonction et j'aimerais un peu d'aide pour comprendre svp:

ca c'est la fonction de cour:

type def float type-val;
type def struct scomp (type-val val, struct scomp*suiv;)type-comp;
type def type-comp *adre-comp;
void supprimer (adre-comp *prem)
{
adr-comp a-virer;
if
(*prem==nul)
{
puts("rien asupprimer");
return(null);
}
a-virer=*prem;
*prem=(*prem) -> suiv;
free(a-virer);
}

*************************************************
pour la premier j'ai pas compris les trois premières lignes ?"type def .... "et j'ai pas compris est adrr-com est de type liste ou pointeur ?
prem un pointeur ou autre chose ?
*prem: signifie le contenu de la première case ou l'adrresse de la première case ?
(*prem)->suiv qu'est ce que ca signifie ?
a-virer c'est quoi ?
***********************************************


c'est la meme fonction mais d'autre manière en td:

liste supprimer (liste l)
{
liste a-virer;
if (l==null)
{
printf("la liste est vide");
return (null);
}
else
if(l->suiv ==null)
{
free(l);
return(null);
}
else
{
a-virer=l;
l=l->suiv;
free(a-virer);
return(l);
}

**********************************************
l est ce que c'est un pointeur ou une liste qui est deja predefine en c?
est ce que quand on met" liste l " le promgramme c va reconnaitre que l est une liste ?
l->suiv c'est quoi ? est ce que c'est le contenu de la case suivant l ou l'adresse de la case suivant l ?
************************************************




Merci pour votre aide
a bientot.
A voir également:

5 réponses

Stupeflip Messages postés 391 Date d'inscription jeudi 8 février 2007 Statut Membre Dernière intervention 4 décembre 2007 94
1 mars 2007 à 12:16
Salut,

liste est surement une structure qu'il a définie avant :)
l->suiv c'est un pointeur sur l.suiv afin de voir directement si y a qqch dessus ou non
0
non jai rien de definie comme structure pour liste.
donc l->suiv c'est un pointeur qui contient l'adresse de la case suivante.
est ce que quelqu'un peut m'aider plus sur la premiere fonction de cour svpsvp
merci beaucoup
0
Michael_Ange Messages postés 223 Date d'inscription jeudi 27 novembre 2003 Statut Membre Dernière intervention 29 mai 2015 19
3 mars 2007 à 10:18
slt miss_master !!!
déja je pense que cè "typedef" et non "type def" !!!
typedef permet de redéfinir un nom de type utilisable pour déclarer des variables dans la suite du programme.
dc pour tes trois premières lignes dont tu parle, on a ceci :

typedef float type-val; // le type float est renommée en type-val

typedef struct scomp (type-val val, struct scomp*suiv;)type-comp;
//tu defini une structure scomp ki contient une valeur de type type-val (float) et l'adresse de l'elmt suivant (pour une liste chainée) et on nomme cette structure type-comp;

typedef type-comp *adre-comp;
// tu vient de renommer le type type-comp en adre-comp, (bien ke cette partie me trouble un peu a cause du caractère "*" ki sert a definir des pointeurs)


en gros cè ça !!!!
0
azamharir Messages postés 8 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 4 juin 2007
4 mars 2007 à 01:03
salut
j'ai vu ton code et je l'ai corrigé.
voici le résultat :

typedef float type_val;/* ici on crée un nouveau type qui s'appelle
type_val et qui n'est d'autre qu'un float
donc si tu declare : type_val f; le f est alors un float */

typedef struct scomp {
type_val val;
struct scomp *suiv;
}type_comp;



typedef type_comp* adre_comp;

adre_comp supprimer (adre_comp prem)
{
if(prem==NULL)
{
puts("rien asupprimer");
return NULL;
}

adre_comp a_virer;
a_virer=prem;
prem=prem->suiv;
free(a_virer);
return prem;
}
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
azamharir Messages postés 8 Date d'inscription lundi 19 février 2007 Statut Membre Dernière intervention 4 juin 2007
4 mars 2007 à 01:36
salut
excuse moi mais mon ancien message etait une faute de frappe.

voici le résultat :

#include<stdio.h>
#include<stdlib.h> // juste les biblios

typedef float type_val;/* ici on crée un nouveau type qui s'appelle
type_val et qui n'est d'autre qu'un float
donc si tu declare : type_val f; le f est alors un float */

typedef struct scomp {
type_val val;
struct scomp *suiv;
}type_comp;
/* ici tu declare un nouveau type type_comp qui est une structure contenant un type_val et un pointeur sur un autre type_comp (suiv) */

typedef type_comp* adre_comp;/* ici un pointeur de type
type_comp sera nommé adre_comp donc une declaration comme
type_comp* t; est équivau à adre_comp t; */

/* ta liste sera composé d'une liste de adre_comp, elle aura une tete
c'est la premiere adre_comp puis cette premiere aura un suiv c la
2° et ainsi de suite ... */

/* la fonction supprimer prend comme parametre une adresse comp
et retourne le meme type */
adre_comp supprimer (adre_comp prem)
{
if(prem==NULL)/* si prem est nulle(pas d'allocation de memoire)
{
puts("rien a supprimer");
return NULL; /* on retourne NULL, donc on n'a rien supprimé
la liste prem etait deja vide (=NULL) */
}

adre_comp a_virer;/* on définit une variable locale de type
adre_comp pour y conserver la nouvelle tete de liste */
a_virer=prem; /* a_virer pointe sur la tete de liste prem
prem=prem->suiv;/* prem pointe sur son suivant donc la 2°
adre_comp est devenu la tete de liste */
free(a_virer);/* on libere l'emplacement memoire de l'ancienne
tete de liste qui etait mise ds a_virer */
return prem; /* on retourne la nouvelle tete de liste
}

cette fonction, je l'ai essayé avec d'autres fcts dans 1 programme et elle marche tres bien.
0