[C] liste chainées de l'aide pitier lol

liste chainées de l'aide pitier lol [C] - Programmation

Marsh Posté le 12-12-2001 à 20:06:33    

voila alors j'ai fais un prog ki calcul en se servant d'une pile ( un tablo ou on fou la pile apres on fais repointer le pointeur tete vers la nouvelles cases ...) mais la je dois modifier mon prog et utiliser des liste chainés pour fair ca je comprends tout a fait le principe mais coder kke chose est carrement impossible alors si kkun aurais un bon tutor la dessus ou pourrai me montrer un chti exemple pas trop dure du genre on met 2 nombres dans des maillons de la chaine en faire la somme et pi enlever/rajouter un maillon bein merci d'avance pour votre aide

Reply

Marsh Posté le 12-12-2001 à 20:06:33   

Reply

Marsh Posté le 12-12-2001 à 20:41:11    

j'te donne un p'tit ex:
 
tu definis ta struct
 
typedef struct tagPOINT
{
 int x;
 int y
 struct tagPOINT *next;
}POINT, *PTRPOINT;
 
ensuite tu codes:
 
PTRPOINT listeHead = NULL;
PTRPOINT listeNew = NULL;
 
//si la liste est vide
if (listeHead == NULL)
{
 listeNew = (PTRPOINT) malloc (sizeof(POINT));
 listeNew->x = abscisse;
 listeNew->y = ordonnee;
 listeNew->next = NULL;
 listeHead = listeNew;
}
// si la liste n'est pas vide, on ajoute en queue
else
{
 listeNew->next = (PTRPOINT) malloc (sizeof(POINT));
 listeNew = listeNew->next;
 listeNew->x = abscisse;
 listeNew->y = ordonnee;
 listeNew->next = NULL;
}
 
En gros ca c'est pour une liste que tu prends d'un coup, apres si tu dois inserer ailleurs, ou plus tard, il te faut un pointeur courant.
C'est pas tres dur.
 
Voila...:)

Reply

Marsh Posté le 12-12-2001 à 22:05:41    

Voici un exemple de suppression d'un élément dans une liste chainée. Il faut trouve l'élément dans la liste avant de l'enlever, exemple structure étudiant :
 
struct Etudiant {
int No;  
char Nom[10];
char Prog[10];
struct Etudiant * Suivant ;
};
 
typedef struct Etudiant typEtud ;
 
**** Dans le main y a ça :
void main()
{
typEtud * lstEtud = NULL ;     //liste des étudiants
typEtud * Etud = NULL ;        //pointeur sur un étudiant
 
do
  {
   switch ( AffMenu() )
   {
    case 1:
    ObtenirNo(&No);
    if ( Trouve(lstEtud, No, &Etud))
      RetirerMaillon(&lstEtud,Etud);
    else
      RefuserSuppression();
    break;
   }
  }
  while ( ! Quitter );
  QuitterProg();
}
       
 
**** FONCTION RETIRER ELEMENT *****
************************************
void RetirerMaillon( struct Etudiant * * Liste,  
struct Etudiant  * Pred)
{
 Struct Etudiant * Trouve;
 if (Pred == NULL)           //si c'est le premier
   {
    Trouve = *Liste ;
    *Liste = (*Liste)->Suivant;
   }
 else
   {  
    Trouve = Pred->Suivant ;     //retirer de la liste
    Pred->Suivant = Trouve->Suivant ;
   }
  free(Trouve);        // retourner la mémoire au OS
}
 
***** FONCTION TROUVE ******
****************************
int Trouve(struct Etudiant * * Liste, int No,
struct Etudiant * * Pred)
{
 typEtud * Ptr;
 *Pred = NULL;   //par défaut
 if ( Liste == NULL)
   return 0;     // pas trouvé
 else
 {
  Ptr = Liste;
  while ( (Ptr != NULL) && (Ptr->No != No) ) <
  {
   *Pred = Ptr ;
   Ptr = Ptr->Suivant;
  }
 if (Ptr == NULL)
   return 0;  
 else  
   return 1;   //On l'a trouvé
 }
}

 

[edtdd]--Message édité par AlphaT--[/edtdd]

Reply

Marsh Posté le 12-12-2001 à 22:14:28    

***** FONCTION ObtenirNumero *****
**********************************
void ObtenirNo(int * No)
{
 clrscr();
 printf("  No >" );
 scanf("%d", &(*No) );
}

Reply

Marsh Posté le 13-12-2001 à 00:11:05    

c enorme les amis je v enfin avoir un suports pour bosser bein en tout k je vous remercie bcp de m'avoir fournit des exemples now reste plus qua bosse merci enkore :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed