Vous êtes sur la page 1sur 5

#include<stdio.

h>

#include<stdlib.h>

struct ticket {

int numero;

float prix;

int pos;

int nbrp;

struct ticket *suiv;

}ticket;

struct ticket *addafterpos(struct ticket *tete, int pos, int numero, float prix, int nbrp)

struct ticket *nouveau_ticket;

struct ticket *ticket_actuel;

int position_actuelle =0 ;

nouveau_ticket = malloc(sizeof(struct ticket));

if (nouveau_ticket == NULL) {

printf(" impossible d'allouer la mémoire .\n");

return tete;

nouveau_ticket->numero = numero;

nouveau_ticket->prix = prix;

nouveau_ticket->nbrp = nbrp;

ticket_actuel = tete;

while (ticket_actuel != NULL && position_actuelle < pos) {

ticket_actuel = ticket_actuel->suiv;

position_actuelle++;

if (position_actuelle != pos)

printf(" la position spécifiée est en dehors de la liste.\n");

free(nouveau_ticket);

return tete;

nouveau_ticket->suiv = ticket_actuel->suiv;

ticket_actuel->suiv = nouveau_ticket;

return tete;
}

struct ticket* trier(struct ticket *tete)

struct ticket *ticket_courant, *ticket_min, *ticket_precedent;

float prix_min;

if (tete == NULL || tete->suiv == NULL) {

return tete;

ticket_courant = tete;

while (ticket_courant->suiv != NULL) {

ticket_min = ticket_courant;

prix_min = ticket_courant->prix;

ticket_precedent = ticket_courant;

while (ticket_precedent->suiv != NULL) {

if (ticket_precedent->suiv->prix < prix_min) {

prix_min = ticket_precedent->suiv->prix;

ticket_min = ticket_precedent->suiv;

ticket_precedent = ticket_precedent->suiv;

if (ticket_courant != ticket_min) {

ticket_min->suiv = ticket_courant->suiv;

ticket_courant->suiv = ticket_min;

ticket_precedent = ticket_courant;

ticket_courant = ticket_min;

while (ticket_courant != ticket_precedent) {

if (ticket_courant->prix < ticket_precedent->prix) {

float temp = ticket_courant->prix;

ticket_courant->prix = ticket_precedent->prix;

ticket_precedent->prix = temp;

ticket_precedent = ticket_precedent->suiv;

} else {

ticket_courant = ticket_courant->suiv;
}

return tete;

struct ticket* fusionner(struct ticket *l1, struct ticket *l2) {

if (l1 == NULL) {

return l2;

if (l2 == NULL) {

return l1;

if (l1->prix < l2->prix) {

l1->suiv = fusionner(l1->suiv, l2);

return l1;

} else {

l2->suiv = fusionner(l1, l2->suiv);

return l2;

int main() {

struct ticket *tete1 = NULL;

struct ticket *tete2 = NULL;

struct ticket *tete_fusionnee = NULL;

int choix_menu = 0;

while (choix_menu != 5) {

printf("Menu :\n");

printf("1. Ajouter un ticket a la liste 1\n");

printf("2. Ajouter un ticket a la liste 2\n");

printf("3. Afficher les listes triees\n");

printf("4. Fusionner les listes\n");

printf("5. Quitter\n");

printf("Votre choix : ");

scanf("%d", &choix_menu);

switch (choix_menu) {

case 1: {
int numero, nbrp;

float prix;

printf("Numero du ticket : ");

scanf("%d", &numero);

printf("Prix du ticket : ");

scanf("%f", &prix);

printf("Nombre de personnes : ");

scanf("%d", &nbrp);

tete1 = addafterpos(tete1, numero, prix, nbrp, 0);

printf("Ticket ajoute a la liste 1\n");

break;

case 2: {

int numero, nbrp;

float prix;

printf("Numero du ticket : ");

scanf("%d", &numero);

printf("Prix du ticket : ");

scanf("%f", &prix);

printf("Nombre de personnes : ");

scanf("%d", &nbrp);

tete2 = addafterpos(tete2, numero, prix, nbrp, 0);

printf("Ticket ajoute a la liste 2\n");

break;

case 3: {

// Tri de la première liste selon le prix

tete1 = trier(tete1);

// Affichage de la première liste triée

printf("Liste 1 triee :\n");

struct ticket *ticket_courant = tete1;

while (ticket_courant != NULL) {

printf("Ticket %d : %.2f dh, %d personne(s)\n", ticket_courant->numero, ticket_courant->prix, ticket_courant-


>nbrp);

ticket_courant = ticket_courant->suiv;

printf("\n");
// Tri de la deuxième liste selon le prix

tete2 = trier(tete2);

// Affichage de la deuxième liste triée

printf("Liste 2 triee :\n");

ticket_courant = tete2;

while (ticket_courant != NULL) {

printf("Ticket %d : %.2f euros, %d personne(s)\n", ticket_courant->numero, ticket_courant->prix,


ticket_courant->nbrp);

ticket_courant = ticket_courant->suiv;

printf("\n");

break;

case 4: {

tete_fusionnee = fusionner(tete1, tete2);

printf("Listes fusionnees :\n");

struct ticket *ticket_courant = tete_fusionnee;

while (ticket_courant != NULL) {

printf("Ticket %d : %.2f dh, %d personne(s)\n", ticket_courant->numero, ticket_courant->prix, ticket_courant-


>nbrp);

ticket_courant = ticket_courant->suiv;

printf("\n");

break;

case 5: {

printf("Au revoir !\n");

break;

default: {

printf("Choix invalide. Veuillez reessayer.\n");

break;

} }

return 0;

Vous aimerez peut-être aussi