Programme de liste chainée

Bonjour tout le monde.est ce que vous pouvez m aider pour faire un programme des listes chainées........ajouter dans une liste au debut,a la fin,au milieu et supprimer....merci
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. ceci n'est que le point te permettant d'avoir un aperçu de ce que tu dois faire.
    Je pense que c'est à toi de coder le reste, et si tu as besoin d'aide n'hesite pas mais code avant et mets ton code ppur voir ce qui ne va pas.

    bon courage
    1. est-ce que ce .h te conviendrait ?

      j'ai l'âme charitable :

      
      #ifndef LISTE_H
      #define LISTE_H
      
      /*-------------------------------------------------------------*
       |							       |	
       |   Module de creation/gestion d'une liste generique(void *)  |
       |							       |
       *-------------------------------------------------------------*/
      
      
      
      typedef struct TCell{
      
      	void *cell;
      
      	struct TCell *next;
      
      	struct TCell *previous;
      
      }TCell;
      
      
      typedef struct{
      
      	TCell *begin;
      
      	TCell *end;
      
      	TCell *iterator;
      
      	int sizeElt;
      
      	int length;
      
      	int posIterator;
      
      }TList;
      
      TList * TListCreate(int sizeElt);		//creation d'une liste
      
      TList * TListCreateCopy(const TList *l);	//creation d'une liste par copie
      
      void TListDelete(TList **l);			//destruction d'une liste
      
      void pushBegin(TList *l,const void *elt);      	//ajout en debut de liste
      
      void pushEnd(TList *l,const void *elt);  	//ajout en fin de liste
      
      void pushIterator(TList *l,const void *elt);  	//ajout au niveau de l'iterator
      
      void * topBegin(const TList *l);		//renvoie sans suppression l'elt de debut de liste
      
      void * topEnd(const TList *l);			//renvoie sans suppression l'elt en fin de liste
      
      void * topIterator(const TList *l);		//renvoie sans suppression l'elt au niveau de l'iterator
      
      void * popBegin(TList *l);                	//suppression en debut de liste
      
      void * popEnd(TList *l);		   	//suppression en fin de liste
      
      void * popIterator(TList *l);		   	//suppression au niveau de l'iterator
      
      void nextIterator(TList *l);		   	//incrementation de l'iterateur
      
      void previousIterator(TList *l);	   	//decrementation de l'iterateur
      
      void iteratorAtBegin(TList *l);			//iterateur au debut
      
      int getPositionIterator(const TList *l);	//getteur position de l'iterateur
      
      void setPositionIterator(TList *l, int indice);	//setteur position de l'iterateur
      
      int getSizeElt(const TList *l);		   	//taille des elements
      
      int getLength(const TList *l);			//taille de la liste
      
      int isEmpty(const TList *l);			//liste vide ?
      
      int isIteratorBegin(const TList *l);		//iterateur au debut ?
      
      int isIteratorEnd(const TList *l);		//iterateur a la fin ?
      
      void ** listToArray(const TList *l);			//liste vers tableau
      
      void arrayDelete(void **tab);			//destruction du tableau
      
      
      #endif 
      
      
      1. J'aurai bien rajouté a cette interface une fonction definissant la façon de liberer la liste:
        void definir_liberation_liste(TList self, void (*liberer)(void*));
        ou a la creation:
        TList * TListCreate(int sizeElt, void (*liberer)(void*));

        En modifiant bien sur la structure en conséquence.
        Peut etre meme faire la meme chose pour une fonction d'affichage et pourquoi pas une fonction de comparaison ;)
      2. merci en tout les cas.mais ce que tu m as donnée ce n est pas les morceaux de code.......
      3. @mimi1234Tu peut modifier ta structure comme sa:
        typedef struct TCell{
        
        	void *cell;
        
        	struct TCell *next;
        
        	struct TCell *previous;
        
        }*TCell;
        typedef struct{
        
        	TCell *begin;
        
        	TCell *end;
        
        	TCell *iterator;
        
        //Ces lignes semblent en trop
        /*	int sizeElt;
        
        	int length;
        
        	int posIterator;*/
        
               void (*liberer)(void*);
               void (*afficher)(void*);
               void (*comparer)(void*,void*);
        
        }*TList;
        


        Et par exemple la creation pourrai etre:
        //la taille(sizeElt) d'une liste simplement chainée ou doublement n'est pas utile si tu n'utilise pas de tableau pour les crées
        TList * TListCreate(/*int sizeElt, */void (*liberer)(void*),void (*comparer)(void*,void*)){
             TList * self = malloc(sizeof(*self));
             if(self == NULL){
                perror(malloc());
                exit(errno);
            }
            self->begin = NULL;
            self->end = NULL;
            self->iterator = NULL;
            self->liberer = liberer;
            self->comparer = comparer;
            self->afficher = NULL;
        //Ces lignes me semblent superflus
        /*    self->sizeElt = sizeElt;
            self->length = 0;
            self->posIterator = -1;*/
        
            return self;
        }


        Et pour l'insertion tu aurai un truc du genre:
        //Ici je ne tient pas compte de la comparaison mais on peu la rajouter pour avoir par exemple une liste ordonnée
        void pushEnd(TList *l,const void *elt){
            TCell *tmp = malloc(sizeof(*tmp));
            if(tmp == NULL){
               perror(malloc());
               exit(errno);
            }
            tmp->cell = elt;
            tmp->previous = l->end;
            tmp->next = NULL;
            l->end = tmp;
        }


        Et par exemple pour l'affichage on aurai:
        void afficher_liste(TList * self){
              if(self->afficher != NULL){
                  for(TCell *tmp = self->begin ;tmp!=NULL; tmp = tmp->next)
                      self->afficher(tmp->cell);
             }
        }

        Apres a chacun sa vision des choses.
        Voilu ;)