listechainee.c~ 4.22 KB
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

/* typedef struct Element Element;

struct Element

{

    int nombre;

    Element *suivant;

};


typedef struct Liste Liste;

struct Liste

{

    Element *premier;

};


Liste *initialisation()
{
    Liste *liste = malloc(sizeof(*liste));
    Element *element = malloc(sizeof(*element));

    if (liste == NULL || element == NULL)
    {
        exit(EXIT_FAILURE);
    }

    element->nombre = 0;
    element->suivant = NULL;
    liste->premier = element;

    return liste;
}

void insertion(Liste *liste, int nvNombre)
{

    Element *nouveau = malloc(sizeof(*nouveau));
    if (liste == NULL || nouveau == NULL)
    {
        exit(EXIT_FAILURE);
    }
    nouveau->nombre = nvNombre;

   
    nouveau->suivant = liste->premier;
    liste->premier = nouveau;
}

void afficherListe(Liste *liste)
{
    if (liste == NULL)
    {
        exit(EXIT_FAILURE);
    }

    Element *actuel = liste->premier;

    while (actuel != NULL)
    {
        printf("%d -> ", actuel->nombre);
        actuel = actuel->suivant;
    }
    printf("NULL\n");
}

void suppression(Liste *liste)
{
    if (liste == NULL)
    {
        exit(EXIT_FAILURE);
    }

    if (liste->premier != NULL)
    {
        Element *aSupprimer = liste->premier;
        liste->premier = liste->premier->suivant;
        free(aSupprimer);
    }
} */

typedef struct Element Element;

struct Element

{

    //int nombre;
    int x;
    int y;
    Element *suivant;

};


typedef struct Liste Liste;

struct Liste

{
    int nbelements;
    
    Element *premier;

};


Liste *initialisation()
{
    Liste *liste = malloc(sizeof(*liste));
    Element *element = malloc(sizeof(*element));

    if (liste == NULL || element == NULL)
    {
        exit(EXIT_FAILURE);
    }

    //element->nombre = 0;
    element->x =0;
    element->y =0;
    
    element->suivant = NULL;
    liste->premier = element;
    liste->nbelements =0;

    return liste;
}

void insertion(Liste *liste, int x, int y)
{
    /* Création du nouvel élément */
    Element *nouveau = malloc(sizeof(*nouveau));
    if (liste == NULL || nouveau == NULL)
    {
        exit(EXIT_FAILURE);
    }
    nouveau->x = x;
    nouveau->y = y;

    /* Insertion de l'élément au début de la liste */
    nouveau->suivant = liste->premier;
    liste->premier = nouveau;
    liste->nbelements=liste->nbelements+1;
}

void afficherListe(Liste *liste)
{
    if (liste == NULL)
    {
        exit(EXIT_FAILURE);
    }

    Element *actuel = liste->premier;

    while (actuel != NULL)
    {
        printf("combinaison x,y : %d  ,  %d \n", actuel->x,actuel->y);
        actuel = actuel->suivant;
    }
}

void suppression(Liste *liste)
{
    if (liste == NULL)
    {
        exit(EXIT_FAILURE);
    }

    if (liste->premier != NULL)
    {
        Element *aSupprimer = liste->premier;
        liste->premier = liste->premier->suivant;
        free(aSupprimer);
    }
}

int abstete(Liste *liste){
  
  Element *actuel = liste->premier;
  return actuel->x;
  
}

int tailledelachaine(Liste *liste) {
  
  return liste->nbelements;
  
}


int ordtete(Liste *liste) {
 Element *actuel = liste->premier;
 return actuel->y;
}

int abscul(Liste *liste) {
 Element *actuel = liste->premier;
 int i;
 for(i=1;i<liste->nbelements;i++)
    {
        actuel = actuel->suivant;
    }
 return actuel->x; 
}

int ordcul(Liste *liste) {
 Element *actuel = liste->premier;
 int i;
 for(i=1;i<liste->nbelements;i++)
    {
        actuel = actuel->suivant;
    }
 return actuel->y; 
}


void freelastbloc(Liste *liste) {
  int i;
  Element *actuel = liste->premier;
  for(i=1; i<liste->nbelements-1; i++){
    actuel = actuel->suivant;
  }
  Element *asupprimer = actuel->suivant;
  free(asupprimer);
  actuel->suivant = NULL;
  liste->nbelements = liste->nbelements-1;
}

void freeListe(Liste *liste){
  while(liste->premier!=NULL) suppression(liste);
}


int main()

{

    Liste *maListe = initialisation();


    insertion(maListe, 4 , 8);

    insertion(maListe, 3 , 9);

    insertion(maListe, 7 , 12);
    
    insertion(maListe, 10 , 15);
    
    printf("\n\n\n");
    
    int a = ordcul(maListe);
    
    printf("%d \n",a);

    freelastbloc(maListe);
    
    afficherListe(maListe);

    freeListe(maListe);

    afficherListe(maListe);
    return 0;

}