init projet

This commit is contained in:
2024-10-06 15:32:20 +02:00
commit d449d4b10a
84 changed files with 13546 additions and 0 deletions

80
tp3/TP3/stack.c Normal file
View File

@@ -0,0 +1,80 @@
#include "stack.h"
#include "alloc.h"
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/////////////////////////////////////////////////////////////////////////////////
// Fonctions auxiliaires ne pouvant pas être utilisées dans d'autres fichiers. //
// Elles ne sont PAS déclarées dans stack.h et sont déclarées "static". Cela //
// signifie qu'elles ne peuvent être utilisées QUE dans ce fichier, stack.c. //
/////////////////////////////////////////////////////////////////////////////////
// Double la taille du tableau utilisé dans la représentation.
// Cette fonction sera utilisée lorsque le tableau est plein et qu'on veut y
// ajouter une valeur.
static void grow_stack(stack *p) {
p -> size_array *= 2;
p -> array = realloc(p -> array, p -> size_array * sizeof(int));
return;
}
// Divise par deux la taille du tableau utilisé dans la représentation.
// Cette fonction sera utilisée lorsque le tableau est rempli à moins de 25% de
// sa capacité.
static void shrink_stack(stack *p) {
if (p -> size_array >= 2) {
p -> size_array /= 2;
p -> array = realloc(p -> array, p -> size_array * sizeof(int));
}
return;
}
////////////////////////////////////////////////////////////////
// Fonctions primitives, exportées dans le fichier d'en-tête. //
////////////////////////////////////////////////////////////////
stack *create_stack(void) {
stack *p = malloc(sizeof(stack));
p -> size_array = 1;
p -> size_stack = 0;
p -> array = malloc(sizeof(int));
return p;
}
void delete_stack(stack *p) {
if (p == NULL) return;
free(p -> array);
free(p);
return;
}
bool isempty_stack(stack *p) {
return p -> size_stack == 0;
}
int size_stack(stack *p) {
return p -> size_stack;
}
int pop(stack *p) {
if (p -> size_stack <= 0) {
FATAL("Pop on empty stack");
}
int val = p -> array[p -> size_stack - 1];
p -> size_stack--;
if (p -> size_stack <= p -> size_array / 4) {
shrink_stack(p);
}
return val;
}
void push(int val, stack *p) {
if (p -> size_stack >= p -> size_array) {
grow_stack(p);
}
p -> array[p -> size_stack] = val;
p -> size_stack++;
return;
}