moitié tp 3

This commit is contained in:
2024-01-29 17:28:51 +01:00
parent cffb424f64
commit eb581c8a31
45 changed files with 964 additions and 16 deletions

15
prepa_CM3/ex3_B/makefile Normal file
View File

@@ -0,0 +1,15 @@
but: ex3
OBJS = queu.o\
text.o
CC = gcc
CFLAGS = -Wall -ansi -pedantic
queu.o: queue.h
text.o: queue.h
ex3: $(OBJS)
$(CC) $(CFLAGS) -o ex3 $(OBJS)
clean:
rm -f $(OBJS) ex3

69
prepa_CM3/ex3_B/queu.c Normal file
View File

@@ -0,0 +1,69 @@
#include <stdlib.h>
#include "queue.h"
struct s_link {
unsigned value;
struct s_link *next;
};
typedef struct s_link link;
struct s_queue {
link *first; /* sortie */
link *last; /* entrée */
};
/* crée une file vide */
queue create_queue(void) {
return (queue) calloc(1, sizeof(struct s_queue));
}
/* ajoute un élément à la file. Renvoie 1 en cas de succès */
int enqueue(queue the_queue, unsigned the_value) {
link *new = (link*) malloc(sizeof(link));
if (new == NULL) {
return 0;
}
new->value = the_value;
new->next = NULL;
if (the_queue->last == NULL) {
the_queue->first = new;
} else {
the_queue->last->next = new;
}
the_queue->last = new;
return 1;
}
/* renvoie 1 si la file est vide */
int empty(queue the_queue) {
return the_queue->first == NULL;
}
/* retire un élément de la file. Renvoie l'élément retiré, ou -1 en cas d'échec */
long dequeue(queue the_queue) {
if(the_queue->first == NULL) {
return -1;
}
link l = *(the_queue->first);
free(the_queue->first);
the_queue->first = l.next;
if (the_queue->first == NULL) {
the_queue->last = NULL;
}
return l.value;
}
/* détruit une file en libérant les ressources associées */
void destroy_queue(queue the_queue) {
link *current, *saved;
current = the_queue->first;
while(current != NULL) {
saved = current->next;
free(current);
current = saved;
}
free(the_queue);
}

22
prepa_CM3/ex3_B/queue.h Normal file
View File

@@ -0,0 +1,22 @@
#ifndef QUEUE_H
#define QUEUE_H
/* le type queue représente une file */
typedef struct s_queue *queue;
/* crée une file vide. Renvoie NULL en cas d'échec */
queue create_queue(void);
/* ajoute un élément à la file. Renvoie 0 en cas d'échec */
int enqueue(queue, unsigned);
/* renvoie 1 si la file est vide */
int empty(queue);
/* retire un élément de la file. Renvoie l'élément retiré, ou -1 en cas d'échec */
long dequeue(queue);
/* détruit une file en libérant les ressources associées */
void destroy_queue(queue);
#endif /* QUEUE_H */

51
prepa_CM3/ex3_B/text.c Normal file
View File

@@ -0,0 +1,51 @@
#include <stdio.h>
#include "queue.h"
/* Affiche les éléments de la file du plus ancien au plus récent */
void displayQueue(queue q) {
queue tempQueue = create_queue(); /* File temporaire pour stocker les éléments*/
int value;
/* Afficher les éléments de la file et les stocker temporairement*/
while (!empty(q)) {
value = dequeue(q);
printf("%d ", value);
enqueue(tempQueue, value);
}
/* Remettre les éléments dans la file d'origine*/
while (!empty(tempQueue)) {
enqueue(q, dequeue(tempQueue));
}
/* Libérer la file temporaire*/
destroy_queue(tempQueue);
printf("\n");
}
int main() {
/* Créer une file et ajouter des éléments (exemple)*/
queue myQueue = create_queue();
enqueue(myQueue, 14);
enqueue(myQueue, 9);
enqueue(myQueue, 28);
enqueue(myQueue, -3);
/* Afficher les éléments de la file sans altérer la file*/
printf("File avant affichage : ");
displayQueue(myQueue);
/* Ajouter quelques éléments supplémentaires (exemple)*/
enqueue(myQueue, 5);
enqueue(myQueue, 12);
/* Afficher les éléments de la file après ajout*/
printf("File après ajout : ");
displayQueue(myQueue);
/* Libérer la mémoire de la file*/
destroy_queue(myQueue);
return 0;
}