libFile.c 3.26 KB
#include <stdio.h>
#include <stdlib.h>
#include "libFile.h"
#include <string.h>

// Fonctions pour projets avec file

int taille(liste_t *l)
{
  return l->nombre;
}

int enfiler (liste_t *l, element_t e, int taille){
element_t nouveau=malloc(taille);
memcpy(nouveau,e,taille);
if (l->nombre >= l->alloue)
      {
      l->contenu = realloc(l->contenu, (l->alloue+300)*sizeof(element_t));
      l->alloue+=300;
      }
l->contenu[l->nombre++]=nouveau;
return 0;
}



int afficher(liste_t *l, void(*affichage)(element_t)) {
int i;
for(i=0; i<taille(l); i++) affichage(l->contenu[i]);
return 0;
}

int defiler(liste_t *l)
{
  int i;
  
  if(taille(l)>=1) 
  {
  free(l->contenu[0]);
      for(i=0; i < taille(l); i++)
      {
      l->contenu[i]=l->contenu[i+1];
      }
  l->nombre--;
  } 
  return 0; 
}

element_t premier(liste_t *l) {
  return l->contenu[0]; }
  
element_t dernier(liste_t *l) {
  return l->contenu[(l->nombre)-1];}
  
element_t enieme(int x, liste_t *l) {
  return l->contenu[x];
} 

// Fonctions pour liste chainée 


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

    if (liste == NULL || element == NULL)
    {
        exit(EXIT_FAILURE);
    }
    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);
}