Commit 1903b30a authored by Antoine Priou's avatar Antoine Priou
Browse files

fin tp1

parent 6fcaad20
Loading
Loading
Loading
Loading
+50 −10
Original line number Diff line number Diff line
#include <stdio.h>
#include <stdlib.h>

struct cell_t {
  void* val;
  unsigned long int id;
@@ -7,30 +10,67 @@ struct cell_t {
typedef struct cell_t* list_t;

list_t list_empty(){
  return NULL ;
}


int list_is_empty(list_t l){
}
  return ( l == list_empty() ) ; }

list_t list_push(list_t l, void* x){
}

list_t list_tail(list_t l){
}
  if ( !list_is_empty(l) ){
    return l -> next ; }
  return NULL ; }

void* list_pop(list_t* l){ 

unsigned long int list_len(list_t l){
  while ( !list_is_empty(l) ){
    l = l -> next ; }
  return l -> id ; }


list_t list_push(list_t l, void* x){
    list_t head = malloc( sizeof( struct cell_t) ) ;
    head -> val = x ;
    head -> next = l ;
    if( list_is_empty(l) == 1 ){
      head -> id = 1 ; }
      
    else {
      head -> id = l -> id + 1 ; }
    return head ;
    }



void* list_top(list_t l){
}
  return list_is_empty(l) ? NULL : l -> val ; }

void list_destroy(list_t l, void (*free)(void*)){
}

// return the found element or NULL
void* list_in(list_t l, void* x, int (*eq)(void*, void*)){
  while ( !list_is_empty(l) )
    if( eq(l -> val, x))
      return l -> val ;
    else
      l = l -> next ;
  return NULL ;
}

unsigned long int list_len(list_t l){
void* list_pop(list_t* l){
  if (list_is_empty(*l) )
    return NULL ;
  void* res = (*l) -> val ;
  list_t new_head = (*l) -> next ;

  free(*l) ;
  *l = new_head ;
  return res ;
}


void list_destroy(list_t l, void (*free)(void*)){
  while ( !list_is_empty(l))
    free( list_pop( &l ) ) ;
}