160 lines
3.0 KiB
C
160 lines
3.0 KiB
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <time.h>
|
|
|
|
struct mail {
|
|
unsigned short int valeur;
|
|
struct mail* suivant;
|
|
};
|
|
|
|
typedef struct mail maillon;
|
|
|
|
void afficher(maillon* premier)
|
|
{
|
|
maillon* p;
|
|
for(p = premier; p != NULL; p = p->suivant)
|
|
{
|
|
printf("%d ", p->valeur);
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
maillon* ajouter_debut(maillon* premier,unsigned short int nouveau)
|
|
{
|
|
maillon* p = (maillon*) malloc(sizeof(maillon));
|
|
if (p)
|
|
{
|
|
p->suivant = premier;
|
|
p->valeur = nouveau;
|
|
}
|
|
return p;
|
|
}
|
|
|
|
maillon* ajouter_dernier(maillon* premier,unsigned short int chiffre)
|
|
{
|
|
maillon* nouveau = (maillon*) malloc(sizeof(maillon));
|
|
nouveau -> suivant = NULL;
|
|
nouveau ->valeur = chiffre;
|
|
maillon* p = (maillon*) malloc(sizeof(maillon));
|
|
for(p = premier; p != NULL; p = p->suivant)
|
|
{
|
|
if(p->suivant==NULL)
|
|
{
|
|
p->suivant=nouveau;
|
|
return premier;
|
|
}
|
|
}
|
|
}
|
|
|
|
unsigned short int retirer_premier(maillon* premier)
|
|
{
|
|
maillon* postp = (maillon*) malloc(sizeof(maillon));
|
|
postp = premier -> suivant;
|
|
unsigned short int chiffre = premier -> valeur;
|
|
premier -> valeur = postp -> valeur;
|
|
premier ->suivant = postp -> suivant;
|
|
free(postp);
|
|
return chiffre;
|
|
}
|
|
|
|
unsigned short int retirer_dernier(maillon* premier)
|
|
{
|
|
unsigned short int output;
|
|
maillon* p = (maillon*) malloc(sizeof(maillon));
|
|
maillon* anteP = (maillon*) malloc(sizeof(maillon));
|
|
for(p = premier; p != NULL; p = p->suivant)
|
|
{
|
|
if(p->suivant==NULL)
|
|
{
|
|
anteP ->suivant = NULL;
|
|
output = p -> valeur;
|
|
free(p);
|
|
return output;
|
|
}
|
|
else
|
|
{
|
|
anteP = p;
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
maillon* circuler(maillon* premier)
|
|
{
|
|
premier= ajouter_debut(premier,retirer_dernier(premier));
|
|
return premier;
|
|
}
|
|
|
|
maillon* circulerAnti(maillon* premier)
|
|
{
|
|
premier=ajouter_dernier(premier,retirer_premier(premier));
|
|
return premier;
|
|
}
|
|
|
|
int main(int argc, char const *argv[])
|
|
{
|
|
srand(time(NULL));
|
|
unsigned short int number = (rand() % (999 - 111 + 1)) + 111;
|
|
maillon *mail = malloc(sizeof(maillon));
|
|
mail -> valeur = number;
|
|
mail -> suivant = NULL;
|
|
for (int i = 0; i < 9; ++i)
|
|
{
|
|
number = (rand() % (999 - 111 + 1)) + 111;
|
|
mail = ajouter_debut(mail,number);
|
|
}
|
|
|
|
int max = mail -> valeur;
|
|
for(maillon* p = mail; p != NULL; p = p->suivant)
|
|
{
|
|
if (p->valeur>max)
|
|
{
|
|
max = p->valeur;
|
|
}
|
|
}
|
|
/*printf("le max est: %d \n", max);
|
|
printf("la liste sans le dernier nombre:");
|
|
retirer_dernier(mail);
|
|
afficher(mail);
|
|
printf("la liste cyclé: ");
|
|
mail=circuler(mail);
|
|
afficher(mail);
|
|
printf("ajout de 666 à la fin : ");
|
|
mail=ajouter_dernier(mail,666);
|
|
afficher(mail);
|
|
printf("suppresion du premier element: \n");
|
|
retirer_premier(mail);
|
|
afficher(mail);
|
|
printf("cycle mais dans lautre sens:\n");
|
|
mail=circulerAnti(mail);
|
|
afficher(mail);*/
|
|
|
|
afficher(mail);
|
|
int rotation;
|
|
printf("choisissez une rotation: \n");
|
|
scanf("%d",&rotation);
|
|
if(rotation > 0)
|
|
{
|
|
for (int i = 0; i < rotation; ++i)
|
|
{
|
|
mail=circuler(mail);
|
|
}
|
|
afficher(mail);
|
|
}else
|
|
{
|
|
if (rotation < 0)
|
|
{
|
|
for (int i = 0; i < (-1*rotation); ++i)
|
|
{
|
|
mail=circulerAnti(mail);
|
|
}
|
|
afficher(mail);
|
|
}else
|
|
{
|
|
afficher(mail);
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
} |