Information

Author(s) Guillaume Noirot Anthony Doeraene
Deadline No deadline
Submission limit No limitation

Tags

Sign in

Bureau postal

Le but de cet exercice est de simuler la gestion de lettres d'un bureau de poste à l'aide de priority queues. Au cours de la journée, le bureau de poste reçoit des lettres qui sont stockées sous forme d'une file (FIFO).

Ces lettres peuvent être envoyé dans 5 continents différents et peuvent avoir un timbre prioritaire qui leur permet d'être envoyées avant les lettres non prioritaires. Il faut donc vider la file en respectant l'ordre d'arrivée et les placer dans la file du continent dans lequel elles doivents être envoyées tout en respectant la priorité donnée par le timbre.

Il y a donc 3 fonctions à écrire:

  • dequeue
  • priority_enqueue
  • process_letters

Ces fonctions utilisent les 2 structures suivantes:

/*
 * Continent: 0 if Europe
 *            1 if America
 *            2 if Asia
 *            3 if Oceania
 *            4 if Africa
 *
 * Priority: 0 if no priority stamp
 *           1 if priority stamp
 */

typedef struct letter {
    int continent;
    int priority;
    char name;
    struct letter* next; //from the front of the queue to the back of the queue
} letter_t;

typedef struct queue {
    letter_t* front;
    letter_t* rear;
    int size;
} queue_t;

Question 1: Dequeue
/*
 * Dequeue a letter from the front of @q
 *
 * @q : the queue
 *
 * @return the letter dequeued from @q if the queue isn't empty, NULL otherwise
 *
 * pre : the queue q will always be valid, you don't have to handle the NULL case
 */
letter_t *dequeue(queue_t* q){
Question 2: Priority Enqueue
/*
 * Add @letter to @q by respecting the priority order
 * -> letters with a priority stamp are always in front of letters without it
 * -> the FIFO order is respected amongst the letters with priority and amongst the letters without it
 *
 * @letter  : the letter to enqueue
 * @q      : the queue
 *
 * @return 0 if no error, -1 if letter is NULL
 *
 * pre : the queue q will always be valid, you don't have to handle the NULL case
 */
int priority_enqueue(queue_t* q, letter_t* letter){
Question 3: Processing Letters
/*
 * Dequeue letters from @post_office_queue and enqueue them in the correct queue of the @continents_queue array
 *
 * @post_office_queue : the queue from which you have to dequeue
 * @continents_queue  : the array of continents queues
 *
 * @return 0 if no error, -1 if the post_office_queue is empty or if an error occurred
 *
 * pre : the queues will always be valid, you don't have to handle the NULL case
 */
int process_letters(queue_t* post_office_queue ,queue_t** continents_queue){