moitié tp 3
This commit is contained in:
15
prepa_CM3/ex3_B/makefile
Normal file
15
prepa_CM3/ex3_B/makefile
Normal 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
69
prepa_CM3/ex3_B/queu.c
Normal 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
22
prepa_CM3/ex3_B/queue.h
Normal 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
51
prepa_CM3/ex3_B/text.c
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user