Manipulation de listes chaînées
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.
2024 © SARL Infini Software - Tous droits réservés
Mentions légales
Les informations présentes dans ce site vous sont fournies dans le but de vous aider à acquérir les compétences nécessaires à
l'utilisation des langages ou des technologies considérés. Infini Software ne pourra nullement être tenu responsable de l'utilisation
des informations présentes dans ce site.
De plus, si vous remarquez des erreurs ou des oublis dans ce document, n'hésitez surtout pas à nous le signaler en envoyant un mail
à l'adresse : .
Les autres marques et les noms de produits cités dans ces documents sont la propriété de leurs éditeurs respectifs.
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 :