0% ont trouvé ce document utile (0 vote)
6 vues6 pages

Gestion des travaux en C avec listes et piles

Transféré par

gharbi.yahia
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
6 vues6 pages

Gestion des travaux en C avec listes et piles

Transféré par

gharbi.yahia
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

#ifndef FONCTIONS_H_INCLUDED

#define FONCTIONS_H_INCLUDED

typedef struct {
int num;
int tempsOp;
char code[10];
} Travail;

typedef struct cellule {


Travail trav;
struct cellule* suiv;
} Cellule;

typedef struct cellule* LSC;


typedef struct cellule* Pile;

Travail saisir();
LSC ajouter_travail(LSC L, Travail T);
int afficher_Liste(LSC L);
LSC inserer_Travail(LSC L, Travail T);
LSC supprimer_Travail(LSC L, int numero);
Travail max_temps_op(LSC L);
Pile emplier_Travaux(Pile P, LSC *L);
void consulter_pile(Pile P);

#endif // FONCTIONS_H_INCLUDED
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Fonctions.h"

Travail saisir() {
Travail nouveauTravail;
printf("Saisir le num�ro du travail : ");
scanf("%d", &[Link]);
printf("Saisir le temps op�ratoire : ");
scanf("%d", &[Link]);
printf("Saisir le code du travail : ");
scanf("%s", [Link]);
return nouveauTravail;
}

LSC ajouter_travail(LSC L, Travail T) {


Cellule* nouvelleCellule = (Cellule*)malloc(sizeof(Cellule));
if (nouvelleCellule == NULL) {
printf("Erreur: M�moire insuffisante.\n");
return L;
}

nouvelleCellule->trav = T;
nouvelleCellule->suiv = NULL;

if (L == NULL) {
return nouvelleCellule;
}

Cellule* courant = L;
while (courant->suiv != NULL) {
courant = courant->suiv;
}

courant->suiv = nouvelleCellule;

return L;
}

int afficher_Liste(LSC L) {
int count = 0;

printf("Liste des travaux :\n");


while (L != NULL) {
printf("Num�ro : %d, Temps op�ratoire : %d, Code : %s\n", L->[Link], L-
>[Link], L->[Link]);
L = L->suiv;
count++;
}

printf("Nombre total de travaux : %d\n", count);


return count;
}

LSC inserer_Travail(LSC L, Travail T) {


Cellule* prec = NULL;
Cellule* courant = L;
while (courant != NULL) {
if (strcmp(courant->[Link], [Link]) == 0) {
Cellule* nouvelleCellule = (Cellule*)malloc(sizeof(Cellule));
if (nouvelleCellule == NULL) {
printf("Erreur: M�moire insuffisante.\n");
return L;
}

nouvelleCellule->trav = T;

if (prec == NULL) {
nouvelleCellule->suiv = L;
L = nouvelleCellule;
} else {
prec->suiv = nouvelleCellule;
nouvelleCellule->suiv = courant;
}

return L;
}

prec = courant;
courant = courant->suiv;
}

printf("Erreur: Le code op�ratoire du travail � ajouter n'existe pas d�j� dans


la liste des travaux.\n");
return L;
}

LSC supprimer_Travail(LSC L, int numero) {


if (L == NULL) {
printf("La liste est vide.\n");
return NULL;
}

if (L->[Link] == numero) {
Cellule* temp = L;
L = L->suiv;
free(temp);
return L;
}

Cellule* prec = L;
Cellule* courant = L->suiv;
while (courant != NULL) {
if (courant->[Link] == numero) {
prec->suiv = courant->suiv;
free(courant);
return L;
}
prec = courant;
courant = courant->suiv;
}

printf("Aucun travail avec le num�ro %d n'a �t� trouv� dans la liste.\n",


numero);
return L;
}
Travail max_temps_op(LSC L) {
if (L == NULL) {
Travail travailDefaut = {0, 0, ""};
return travailDefaut;
}

Travail maxTempsOp = L->trav;


L = L->suiv;
while (L != NULL) {
if (L->[Link] > [Link]) {
maxTempsOp = L->trav;
}
L = L->suiv;
}

return maxTempsOp;
}

Pile emplier_Travaux(Pile P, LSC *L) {


if (*L == NULL) {
printf("La liste est vide, aucun travail � empiler.\n");
return P;
}

Travail maxTempsOp = max_temps_op(*L);


*L = supprimer_Travail(*L, [Link]);

Cellule* nouvellePile = (Cellule*)malloc(sizeof(Cellule));


if (nouvellePile == NULL) {
printf("Erreur: M�moire insuffisante.\n");
return P;
}

nouvellePile->trav = maxTempsOp;
nouvellePile->suiv = P;

return nouvellePile;
}

void consulter_pile(Pile P) {
if (P == NULL) {
printf("La pile est vide.\n");
} else {
printf("Sommet de la pile : Num�ro %d, Temps op�ratoire %d, Code %s\n", P-
>[Link], P->[Link], P->[Link]);
}
}
#include <stdio.h>
#include <stdlib.h>
#include "Fonctions.h"

int main() {
LSC listeTravaux = NULL;
Pile pileTravaux = NULL;
int choix;

do {
printf("\nMenu :\n");
printf("1. Ajouter un travail\n");
printf("2. Afficher la liste des travaux\n");
printf("3. Ins�rer un nouveau travail\n");
printf("4. Supprimer un travail\n");
printf("5. Empiler les travaux par temps op�ratoire\n");
printf("6. Consulter la pile\n");
printf("0. Quitter\n");
printf("Choix : ");
scanf("%d", &choix);

switch (choix) {
case 1: {
printf("\nAjout d'un travail :\n");
Travail nouveauTravail = saisir();
listeTravaux = ajouter_travail(listeTravaux, nouveauTravail);
break;
}
case 2:
printf("\nListe des travaux :\n");
afficher_Liste(listeTravaux);
break;
case 3: {
printf("\nIns�rer un nouveau travail :\n");
Travail nouveauTravail = saisir();
listeTravaux = inserer_Travail(listeTravaux, nouveauTravail);
break;
}
case 4: {
int numero;
printf("\nSupprimer un travail :\n");
printf("Entrez le num�ro du travail � supprimer : ");
scanf("%d", &numero);
listeTravaux = supprimer_Travail(listeTravaux, numero);
break;
}
case 5:
pileTravaux = emplier_Travaux(pileTravaux, &listeTravaux);
break;
case 6:
printf("\nPile des travaux :\n");
consulter_pile(pileTravaux);
break;
case 0:
printf("Fin du programme.\n");
break;
default:
printf("Choix invalide. Veuillez choisir � nouveau.\n");
break;
}
} while (choix != 0);

return 0;
}

Vous aimerez peut-être aussi