-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtable-liste.c
110 lines (100 loc) · 2.19 KB
/
table-liste.c
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
#include "table.h"
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//
// Fonctions elementaires de manipulation de la table
//
/* Creation d'une table vide */
Table creer_table(void) {
return NULL;
}
/* Insertion d'un élément dans la table triée. Si l'élément est déjà
* présent dans la table, le compteur d'occurrences est incrémenté.
* La fonction renvoie le nombre actuel d'occurrences de elt */
//D'abord, on trouve où faire l'insertion.
//pp sert à garder en mémoire l'élément d'avant pour changer son next.
int ajouter_table(Table *t, int elt) {
t_table *p = *t;
t_table *d = p;
t_table *pp = NULL;
while (p != NULL) {
pp = p;
p = p-> next;
}
t_table *e = malloc(sizeof(t_table));
e -> next = p;
if (pp == NULL) {
*t = e;
} else {
pp -> next = e;
}
e-> vertice = elt;
return 1;
}
/*
Suppression d'un élément de la table, peu importe son nombre d'occurence
*/
int supprimer_table(Table *t, int elt){
int r = 0;
t_table *p = *t;
t_table *pp = NULL;
while (p != NULL && (p-> vertice != elt)) {
pp = p;
p = p-> next;
}
if(pp == NULL){
if(p != NULL){
r = 1;
}
pp = p -> next;
}
else{
pp -> next = p -> next;
if(p -> next != NULL){
r = 1;
}
}
*t = pp;
return r;
}
/* Impression triée des éléments de la table */
void imprimer_table(Table table) {
t_table *p;
for (p = table; p != NULL; p = p -> next) {
printf("%d ",p-> vertice);
}
printf("\n");
}
/* Appel d'une fonction sur chacun des éléments de la table */
//void appliquer_table(Table table, t_fonction fonction) {}
/* Recherche du nombre d'occurrences d'un élément */
//int rechercher_table(Table table, char *elt){}
/* Destruction d'une table */
void detruire_table(Table *table){
free(table);
}
/*int main() {
int *a = malloc(10 * sizeof(int));
*(a+1) = 1;
int *b = (int *)realloc(a,20 * sizeof(int));
free(a);
a = b;
*(a+15) = 2;
printf("%d\n",*(a+15));
Table t;
t = creer_table();
ajouter_table(&t, 1);
imprimer_table(t);
ajouter_table(&t, 2);
imprimer_table(t);
ajouter_table(&t, 3);
ajouter_table(&t, 4);
ajouter_table(&t, 5);
ajouter_table(&t, 6);
imprimer_table(t);
supprimer_table(&t,1);
ajouter_table(&t,1);
imprimer_table(t);
return 0;
}*/