This repository has been archived on 2019-08-09. You can view files and clone it, but cannot push or open issues or pull requests.
s6-pa-tp/TP4/listeTriees.c
Geoffrey Frogeye b464da4e57 TP4 WIP
La fonction insérer n'est pas correcte
2017-03-10 18:16:55 +01:00

124 lines
2.2 KiB
C

#include<stdlib.h>
#include<stdio.h>
#include<stdbool.h>
struct Cellule {
struct Cellule* suiv;
int val;
};
typedef struct Cellule Cellule;
Cellule* init_cellule(int val) {
Cellule* l;
l = malloc(sizeof(Cellule));
l->suiv = NULL;
l->val = val;
return l;
}
void ajout_tete(Cellule** l, int val) {
Cellule* p;
p = malloc(sizeof(Cellule));
p->val = val;
p->suiv = *l;
*l = p;
}
void imprimer(Cellule* l) {
if (l == NULL) {
return;
}
while (l->suiv != NULL) {
printf("%d\n", l->val);
l = l->suiv;
}
printf("%d\n", l->val);
}
bool est_trie(Cellule* l) {
if (l == NULL) {
return true;
}
int temp;
while (l->suiv != NULL) {
temp = l->val;
l = l->suiv;
if (l->val < temp) {
return false;
}
}
return true;
}
void supprimer_tete(Cellule** l) {
Cellule* p;
p = (*l)->suiv;
free(*l);
*l = p;
}
void desallouer(Cellule** l) {
while ((*l)->suiv != NULL) {
supprimer_tete(l);
}
free(*l);
}
// 2.2.1
void inserer(Cellule** p, int val) {
Cellule* l = *p;
if (l == NULL) {
l = init_cellule(val);
return;
}
while (l->suiv != NULL && l->val < val) {
p = &l->suiv;
l = l->suiv;
}
if (l->val == val) {
return;
}
if (l->suiv == NULL) {
l->suiv = init_cellule(val);
} else {
ajout_tete(p, val);
}
}
int main() {
// Création de la liste
Cellule* l = init_cellule(59);
ajout_tete(&l, 53);
ajout_tete(&l, 47);
ajout_tete(&l, 43);
ajout_tete(&l, 41);
ajout_tete(&l, 37);
ajout_tete(&l, 31);
ajout_tete(&l, 29);
ajout_tete(&l, 23);
ajout_tete(&l, 19);
ajout_tete(&l, 17);
ajout_tete(&l, 13);
ajout_tete(&l, 11);
ajout_tete(&l, 7);
ajout_tete(&l, 5);
ajout_tete(&l, 3);
ajout_tete(&l, 2);
if (!est_trie(l)) {
printf("C'est pas trié !\n");
}
// Test début, millieu et fin
inserer(&l, 0);
inserer(&l, 30);
inserer(&l, 70);
// Test redondance début, millieu et fin
inserer(&l, 2);
inserer(&l, 7);
inserer(&l, 59);
imprimer(l);
desallouer(&l);
}