Participer au site avec un Tip
Rechercher
 

Améliorations / Corrections

Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.

Emplacement :

Description des améliorations :

Manipulation de listes chaînées

Gestion dynamique de la mémoire Les pointeurs sur fonctions


Accès rapide :
Codage d'une librairie de manipulation de listes chaînées.


Codage d'une librairie de manipulation de listes chaînées.



 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
#ifndef LIST_H_
#define LIST_H_

// --- Type definitions ---

#define ELEMENT_TYPE int

typedef struct _ListNode {

    ELEMENT_TYPE value;
    struct _ListNode * next;

} ListNode;

typedef struct _List {
    ListNode * head;
} List;


// --- List functions declarations ---

List listCreate();
void listAdd( List * l, ELEMENT_TYPE e );
size_t listSize( List l );
void listDisplay( List l );
void listClear( List * l );


#endif /* LIST_H_ */
Déclaration de notre librairie de manipulation de listes chainées.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
 42 
 43 
 44 
 45 
 46 
 47 
 48 
 49 
 50 
 51 
 52 
 53 
 54 
 55 
 56 
 57 
 58 
 59 
 60 
 61 
 62 
 63 
 64 
 65 
 66 
 67 
 68 
 69 
 70 
 71 
 72 
#include <stdbool.h>
#include <stdlib.h>
#include <stdio.h>

#include "List.h"


List listCreate() {
    List l;
    l.head = NULL;
    return l;
}

ListNode * listNodeAdd( ListNode * listNode, ELEMENT_TYPE value ) {

    if ( listNode == NULL || value < listNode->value ) {
        ListNode * newNode = (ListNode *) malloc( sizeof( ListNode ) );
        if ( newNode == NULL ) {
            fputs( "Cannot allocate a new list node\n", stderr );
            exit( EXIT_FAILURE );
        }
        newNode->value = value;
        newNode->next = listNode;
        return newNode;
    }

    listNode->next = listNodeAdd( listNode->next, value );
    return listNode;
}


void listAdd( List * list, ELEMENT_TYPE value ) {
    list->head = listNodeAdd( list->head, value );
}


size_t listSize( List list ) {
    size_t length = 0;

    ListNode * currentNode = list.head;
    while( currentNode != NULL ) {
        length++;
        currentNode = currentNode->next;
    }

    return length;
}


void listDisplay( List list ) {
    ListNode * currentNode = list.head;
    printf( "[" );
    while( currentNode != NULL ) {
        printf( "%d", currentNode->value );
        currentNode = currentNode->next;
        if ( currentNode != NULL ) printf( ", " );
    }
    printf( "]" );
}


void listClear( List * list ) {
    ListNode * currentNode = list->head;

    while( currentNode != NULL ) {
        ListNode * nodeToDelete = currentNode;
        currentNode = currentNode->next;
        free( nodeToDelete );
    }

    list->head = NULL;
}
Implémentation de notre librairie de manipulation de listes chainées.

 1 
 2 
 3 
 4 
 5 
 6 
 7 
 8 
 9 
 10 
 11 
 12 
 13 
 14 
 15 
 16 
 17 
 18 
 19 
 20 
 21 
 22 
 23 
 24 
 25 
 26 
 27 
 28 
 29 
 30 
 31 
 32 
 33 
 34 
 35 
 36 
 37 
 38 
 39 
 40 
 41 
#include <stdlib.h>
#include <stdio.h>

#include "List.h"


int main(int argc, char **argv) {

    List l = listCreate();
    listDisplay( l );
    printf( "\n" );

    listAdd( &l, 20 );
    listDisplay( l );
    printf( "\n" );

    listAdd( &l, 30 );
    listDisplay( l );
    printf( "\n" );

    listAdd( &l, 10 );
    listDisplay( l );
    printf( "\n" );

    listAdd( &l, 50 );
    listDisplay( l );
    printf( "\n" );

    listAdd( &l, 40 );
    listDisplay( l );
    printf( "\n" );

    printf( "Size Before == %lu\n", listSize( l ) );

    listClear( &l );
    listDisplay( l );
    printf( "\n" );
    printf( "Size After == %lu\n", listSize( l ) );

    return EXIT_SUCCESS;
}
Utilisation de notre librairie de manipulation de listes chainées.


Gestion dynamique de la mémoire Les pointeurs sur fonctions