Listes chaînées

Fermé
anthony - Modifié par anthony le 16/05/2010 à 17:35
 anthony - 16 mai 2010 à 20:04
Bonjour,
Alors voila je suis en train de galère sur les listes chaînées je ne comprends vraiment rien.
Alors voici un code de liste chaînée simple :
#include <stdlib.h> 
  
typedef struct element element; 
struct element 
{ 
    int val; 
    struct element *nxt; 
}; 
  
typedef element* llist; 
  
  
  
int main(int argc, char **argv) 
{ 
    /* Déclarons 3 listes chaînées de façons différentes mais équivalentes */ 
    llist ma_liste1 = NULL; 
    element *ma_liste2 = NULL; 
    struct element *ma_liste3 = NULL; 
  
  
    return 0; 
} 


bon alors ici ce que je ne comprends pas c'est pourquoi avoir mit un pointeur sur llist alors si j'aurais mis sa:
typedef element llist;

sa aurais revenu au même ???

et aussi pourquoi initialisé ma_liste1 a NULL, ma_liste1 n'est pas un pointeur, c'est une variable

5 réponses

Revan26914 Messages postés 1778 Date d'inscription dimanche 14 octobre 2007 Statut Contributeur Dernière intervention 15 octobre 2019 320
16 mai 2010 à 17:56
Bonjour,

Pour ta première question bon alors ici ce que je ne comprends pas c'est pourquoi avoir mit un pointeur sur llist

C'est pour avoir un pointeur de tête de liste. C'est important parce que si tu insères un élément en tête de liste (typiquement dans le cas d'une pile) tu dois pouvoir modifier ta tête de liste Ou si tu retires le premier élément de ta liste, tu dois modifier ton pointeur de tête de liste pour le faire pointer sur le second élément.


Pour ta deuxième question: et aussi pourquoi initialisé ma_liste1 a NULL, ma_liste1 n'est pas un pointeur, c'est une variable


En fait, un pointeur est une variable qui contient une adresse mémoire.



Cordialement,
Revan
0
oui je sais que un pointeur est une variable qui contient une adresse sauf que cette variable il faut l'indiquer par l'opérateur * pour stocker des adresse mémoire sinon sa reste un variable normale qui stocke des valeurs ?

Et pour le pointeur de tête llist, ici ce n'est pas un pointeur de tête, c'est le type puisque il y a typedef ??

moi perso ce que j'aurais fais pour avoir un pointeur de tête se serait
struct  element *head
0
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 567
16 mai 2010 à 18:29
0
eu oui je l'ai déjà lu ce lien mais ce que je comprends pas c'est ce code que j'ai pris ici:
http://www.siteduzero.com/tutoriel-3-36245-les-listes-chainees.html#
0
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 567
16 mai 2010 à 18:45
Re,

Figure toi que je ne vais pas commencer lire le tuto du siteduzero ;-))

moi perso ce que j'aurais fais pour avoir un pointeur de tête se serait

struct element *head


Bien sûr que tu peux.
Dans mon exemple, j'ai crée une structure

typedef struct ListeRepere {
		Element *debut;
		Element *fin;
		int taille;
}Liste;



qui contient le début, la fin et la taille (le nbr d'éléments) de la liste.

Quelque soit les opérations sur la liste (ajout, suppression, destruction), les variables seront mise à jour pour avoir toujours le début, la fin et le nombre d'éléments de la liste.
Pourquoi?
En cas des besoin, il n'y aura pas nécessaire de se déplacer dans la liste pour savoir le nombre d'éléments, ou atteindre le début ou la fin de la liste.

Le plus important c'est de comprendre le principe, ensuite tu peux créer tes listes en fonction de tes besoins.
0

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

Posez votre question
ah ok je comprends ben merci de ton aide
Et pour le sujet je ne le met pas résolu au cas ou je rencontre un autre problème sur les listes chaînées j'espère que sa ne vous dérange pas ...
0