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 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125
| #include<stdio.h>
#include <stdlib.h>
//les structures
struct noeud
{
int elt;
struct noeud *next;
};
typedef struct noeud my_node;
typedef struct
{
my_node *first;
my_node *last;
} my_list;
//initialiser une pile
// 0 pb init
// 1 tout va bien
int initliste(my_list *liste)
{
int ret = 0;
puts("Initialisation de la liste");
if (liste != NULL)
{
liste->first = NULL;
liste->last = NULL;
ret = 1;
}
return ret;
}
//Insertion en fin de liste
my_node *insert(my_node *last, int val)
{
my_node *nouveau;
printf("Insertion de %d dans la liste\n", val);
nouveau = malloc(sizeof *nouveau); // pas de cast en C !
if (nouveau == NULL)
{
// cas d'erreur à toujours gérer après un malloc
fprintf(stderr, "Pb malloc");
return last; // ?? ça en fait ça dépend de ton problème
}
nouveau->elt = val;
nouveau->next = NULL;
if (last != NULL)
last->next = nouveau;
return nouveau;
}
//eaffichage de la liste
void affiche(my_list *lst)
{
my_node *tete = lst->first;
puts("Affichage de la liste");
while (tete != NULL)
{
printf("%4d", tete->elt);
tete = tete->next;
}
puts("\naffichage de la liste termine !\n\n");
}
// destruction des noeuds de la liste
// 0 si pb
// 1 sinon
int destruction_list(my_list *liste)
{
int ret = 0;
puts("Destruction de la liste");
if (liste != NULL)
{
my_node *tmp1, *tmp2;
ret = 1;
tmp1 = liste->first;
while ( tmp1 != NULL)
{
tmp2 = tmp1->next;
free(tmp1);
tmp1 = tmp2;
}
liste->first = NULL;
liste->last = NULL;
}
return ret;
}
int main(void)
{
my_list liste;
initliste(&liste);
affiche(&liste);
// ici ce que j'indique n'est peut-être pas la meilleure méthode
// mais c'est pour que tu comprenne mieux le principe
// enfin j'espère ...
liste.last = insert(liste.last, 5);
if (liste.first == NULL)
{
puts("Creation d'une nouvelle liste, la tete est creee");
liste.first = liste.last;
}
affiche(&liste);
liste.last = insert(liste.last, 10);
if (liste.first == NULL)
{
puts("Creation d'une nouvelle liste, la tete est creee");
liste.first = liste.last;
}
affiche(&liste);
liste.last = insert(liste.last, 2);
if (liste.first == NULL)
{
puts("Creation d'une nouvelle liste, la tete est creee");
liste.first = liste.last;
}
affiche(&liste);
destruction_list(&liste);
affiche(&liste);
return 0;
} |
Partager