no save
Assistance
Achat
News

Forum | programmation
Langage C pointeurs, creation de liste.
mamiemando, le jeu. 30 mars 2006 à 14:09:25
Bon déjà vu que tu insères tes maillons en début de liste, lorsque tu vas parcourir ta liste tu vas afficher les fiches dans l'ordre inverse des fiches. Il faut donc soit insérer les maillons en fin de liste, soit faire un chaînage dans l'autre sens. Voici ce que je ferais :

struct maillon{
// void * = adresse générique
// mais tu mets en fait ce que tu veux. Par exemple pour une
// liste d'entier tu mets int data
void * data;
struct maillon * next;
//struct maillon * prev; //chaînage dans l'autre sens
};

struct list{
struct maillon * begin;
struct maillon * end;
};

//Creer une liste
struct list new_list(){
struct list l;
l.begin=NULL;
l.end=NULL;
return l;
}

//Obtenir le premier element
struct maillon * begin(struct list * l){
return l.begin;
}

//Obtenir le dernier element
struct maillon * end(struct list * l){
return l.end;
}

//Inserer un élément en fin de liste
void add(struct list * l,struct maillon * x){
struct maillon *m=l->end();
if (m!=NULL) m->next=x;
else l->begin=x;
l->end=x;
}

Je n'ai pas pris le temps de débugger ce code c'est juste pour te donner l'idée. Ca ressemble assez à ce qui se fait en C++ en fait (le struct maillon * m que j'utilise serait remplacé par iterator). L'objectif est ici :
- de faire pointer l.begin sur le premier élément
- de faire pointer l.end sur le dernier élément
- de maintenir le chaînage

Par la suite pour parcourir la liste il suffit de faire :
struct maillon *m_it;
struct maillon *m_end=l->end();
for(m_it=l->begin() ; m_it!=m_end ; m_it=m_it->suivant){
//traiter le struct maillon courant (*m_it)
}
Exemple :
void show_list(struct list * l){
struct maillon *m_it;
struct maillon *m_end=l->end();
unsigned int i=0;
for(m_it=l->begin() ; m_it!=m_end ; m_it=m_it->suivant){
printf("l[%d] = %d\n",i,m_it->data); //si data est de type int
++i;
}
}

Bonne chance
PrécédentUn Gars
mars 06
Un Gars
mars 06
Suivant
REPONSES
mamiemando
mars 06
Un Gars
mars 06
mamiemando
mars 06
Un Gars
mars 06
mamiemando
mars 06
Un Gars
mars 06
mamiemando
mars 06
Un Gars
mars 06
mamiemando
avr. 06
Drayell / Ank[58]f1x : Webmaster, Coder(C/C++, Asm), Designer
avr. 06
Version Web
Réalisé par RedShift
no save