Partage
  • Partager sur Facebook
  • Partager sur Twitter

liste chainee

    23 février 2018 à 17:29:06

    bonjour a toutes et a tous

    J'aimerai faire une fonction qui me permet de d'ajouter un élément a une liste vide et une fonction qui supprime un élément dont la vie est a 0. Mais je ne sais pas comment mis prendre.

    typedef struct alien alien;
    struct alien
    {
    	unsigned int life;
    	alien *next;
    	alien *prec;
    };
    
    typedef struct Liste Liste;
    struct Liste
    {
    	alien *premier;
    	alien *dernier;
    };
    
    Liste *initialisation()
    {
    	Liste *liste = malloc(sizeof(*liste));
    
    
    
    	if (liste == NULL)
    	{
    		exit(EXIT_FAILURE);
    	}
    
    	liste->premier=NULL;
    	liste->dernier=NULL;
    
    	return liste;
    }
    
    
    void insertion(Liste *liste, int nvNombre)
    {
    	/* Création du nouvel élément */
    	alien *nouveau = malloc(sizeof(*nouveau));
    	if (liste == NULL || nouveau == NULL)
    	{
    		exit(EXIT_FAILURE);
    	}
    	nouveau->life = nvNombre;
    
    	/* Insertion de l'élément au début de la liste */
    	nouveau->next = liste->premier;
    	liste->premier->prec = nouveau;
    	nouveau->prec = NULL;
    	liste->premier = nouveau;
    }
    
    void suppression(Liste *liste)
    {
    	if (liste == NULL)
    	{
    		exit(EXIT_FAILURE);
    	}
    
    	if (liste->premier != NULL)
    	{
    		alien *aSupprimer = liste->premier;
    		liste->premier = liste->premier->next;
    		free(aSupprimer);
    	}
    }
    
    void suppressionElement(Liste *liste)
    {
    	if (liste == NULL)
    	{
    		exit(EXIT_FAILURE);
    	}
    
    	alien *actuel = liste->premier;
    	while (actuel != NULL)
    	{
    		if (actuel->life == 0)
    		{
    			if (actuel->prec == NULL)//si le premier est a 0
    			{
    				liste->premier->next = NULL;
    				free(actuel);
    			}
    			else if (actuel->next == NULL)//si le dernier est a 0
    			{
    				liste->dernier->next = NULL;
    				free(actuel);
    			}
    			else//si on est au millieu
    			{
    				actuel->prec = actuel->next;
    				actuel->next = actuel->prec;
    				free(actuel);
    			}
    		}
    	}
    }
    
    
    void afficherListe(Liste *liste)
    {
    	if (liste == NULL)
    	{
    		exit(EXIT_FAILURE);
    	}
    
    	alien *actuel = liste->premier;
    
    	while (actuel != NULL)
    	{
    		printf("%d -> ", actuel->life);
    		actuel = actuel->next;
    	}
    	printf("NULL\n");
    }
    
    int main()
    {
    	Liste *maListe = initialisation();
    
    
    	for (int i = 0; i < 10; i++)
    	{
    		insertion(maListe, i);
    	}
    	afficherListe(maListe);
    	printf("\n");
    
    
    
    	afficherListe(maListe);
    	_getch();
    	return 0;
    }
    



    -
    Edité par JEANBAPTISTECOMTE1 23 février 2018 à 18:09:55

    • Partager sur Facebook
    • Partager sur Twitter
      23 février 2018 à 19:37:03

      JEANBAPTISTECOMTE1 a écrit:

      bonjour a toutes et a tous

      J'aimerai faire une fonction qui me permet de d'ajouter un élément a une liste vide et une fonction qui supprime un élément dont la vie est a 0. Mais je ne sais pas comment mis prendre.

       Les réponses ont l'air d'être dans le code
      Il faut juste ne pas essayer de modifier l'ancien premier (ou dernier) quand il n'y en a pas.

      -
      Edité par michelbillaud 23 février 2018 à 19:43:43

      • Partager sur Facebook
      • Partager sur Twitter

      liste chainee

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown