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

Tab Liste

Transféré par

Chifa Guesmi
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 TXT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
31 vues6 pages

Tab Liste

Transféré par

Chifa Guesmi
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 TXT, PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 6

#include <stdio.

h>
#include <stdlib.h>
/*****Liste unidirectionnelle*/
struct cellule
{
int info ;
struct cellule *suivant ;
};
struct liste
{
struct cellule * premier ;
struct cellule * dernier ;
};
const unsigned N = 10;
struct liste TabListe[10];
/******Fonction creer_liste*******/
void creer_liste(struct liste *L)
{
L->premier=NULL ;
L->dernier=NULL ;
}
/******Fonction liste_vide*******/
int liste_vide(struct liste L)
{
return L.premier==NULL;
}
/******Fonction inserer_avant_premier******/
void inserer_avant_premier(struct liste * L , int x)
{
struct cellule * p;
p = (struct cellule*)malloc(sizeof(struct cellule));
p->info = x;
p->suivant = L->premier ;
if(L->premier==NULL)
L->dernier=p;
L->premier = p;
}
/**Fonction Remplir 1 en utilisant inserer_avant_premier**/
void remplir1(struct liste * L,int n )
{
int x,i;
for(i=1 ; i<=n ; i++)
{
printf("Donner un entier : ");
scanf("%d",&x);
inserer_avant_premier(L , x);
}
}
/******Fonction inserer_apres_dernier******/
void inserer_apres_dernier(struct liste * L , int x)
{
struct cellule *p;
p = (struct cellule*)malloc(sizeof(struct cellule));
p->info = x;
p->suivant = NULL ;
if(L->dernier==NULL)
L->premier=p;
else
(L->dernier)->suivant=p;
L->dernier = p;
}
/**Fonction Remplir 1 en utilisant inserer_aprés_dernier**/
void remplir2(struct liste *L,int n)
{
int x,i;
for(i=1 ; i<=n ; i++)
{
printf("Donner un entier : ");
scanf("%d",&x);
inserer_apres_dernier(L,x);
}
}
/****Fonction TAILLE***/
int taille(struct liste L)
{
struct cellule * p;
unsigned t=0;
if(liste_vide(L))
return(0);
else
{
p=L.premier;
while(p!=NULL)
{
p=p->suivant;
t++;
}
return(t);
}
}
/**** Fonction recherche_référence****/
struct cellule * recherche_reference(struct liste L , int x)
{
struct cellule * p=L.premier;
while (p)
if(p->info==x)
return p;
else
p=p->suivant;
return NULL;
}
/***Fonction affiche***/
void affiche(struct liste L)
{
struct cellule *q=L.premier;
if( liste_vide(L))
printf("Liste Vide");
else
while(q!=NULL)
{
printf("%d ",q->info);
q=q->suivant;
}
printf("\n");
}
/****Fonction insertion après élément référencée*****/
void inserer_apres_reference(struct cellule * p, int x)
{
struct cellule *q;
q = (struct cellule*)malloc(sizeof(struct cellule));
q->info = x;
q->suivant = p->suivant ;
p->suivant=q;
}
/****Fonction insertion avant élément référencée*****/
void inserer_avant_reference(struct cellule * p, int x)
{
struct cellule *q;
q = (struct cellule*)malloc(sizeof(struct cellule));
*q = *p;
p->info = x ;
p->suivant=q;
}
/*****Fonction suppression du premier élément****/
void supprimer_premier( struct liste * L)
{
struct cellule * s;
s= L->premier;
L->premier = s->suivant;
free(s);
/* exception une liste formée d’un seul élément */
if(L->premier ==NULL)
L->dernier=NULL;
}
/*****Fonction suppression du dernier élément****/
void supprimer_dernier( struct liste * L)
{
struct cellule * p; /*pour parcourir ll */
if(L->premier==L->dernier) /* liste formé d’un seul élément*/
supprimer_premier(L);
else
{
p=L->premier;
while(p->suivant!= L->dernier)
p=p->suivant;
p->suivant=NULL; /* mise à jour */
free(L->dernier); /* libérer le dernier */
L->dernier=p; /* mise à jour */
}
}
/*****Fonction suppression d’un élément référencée******/
void supprimer_element_reference( struct cellule *p)
{
struct cellule *q;
q=p->suivant;
*p=*q;
free(q);
}
/*****Fonction supprimer_apres_reference******/
void supprimer_apres_reference(struct cellule *p)
{
struct cellule * q=p->suivant;
p->suivant=q->suivant;
free(q);
}
/***********************************************/
/*** Question 1 exercice 2***/
void CreerTabListe ( )
{
unsigned i;
for ( i=0; i < N; i++)
creer_liste(&TabListe[i]);
}

/*** Question 2 exercice 2***/


unsigned TabListeVide ( )
{
unsigned i;
for (i = 0; i < N; i++)
if (!liste_vide(TabListe[i]))
return 0;
return 1;
}
/*** Question 3 exercice 2***/
void RemplirTabListe ( )
{
unsigned i,j;
int nombre;
srand(time(NULL));
for ( i= 0; i < N; i++)
for (j = 0; j < 5; j++)
{
do
{
nombre = rand()%9991+10;
}while(nombre%10!=i);
inserer_apres_dernier(&TabListe[i], nombre);
}
}
/*** Question 4 exercice 2***/
void AfficheTabListe ( )
{
unsigned i;
for (i = 0; i < N; i++)
{
printf("Liste %d : ", i);
affiche(TabListe[i]);
}
}
/*** Question 5 exercice 2***/
unsigned fff(int x)
{
return x%N;
}
unsigned fff2(int x)
{
return (x*2)%N;
}
void AjouterElement (int x, unsigned (*Oper) (int) )
{
unsigned indice = (*Oper)(x);
inserer_apres_dernier(&TabListe[indice], x);
}

/*** Question 6 exercice 2***/


struct cellule* Rechercher (int x, unsigned (*Oper) (int) )
{
unsigned indice = Oper(x);
return recherche_reference(TabListe[indice], x);
}

/*** Question 7 exercice 2***/


void SuppElement (int x, unsigned (*Oper) (int) )
{
unsigned indice = Oper(x);
struct cellule *p = recherche_reference(TabListe[indice], x);
if (p)
{
if (p == TabListe[indice].premier)
supprimer_premier(&TabListe[indice]);
else
if (p == TabListe[indice].dernier)
supprimer_dernier(&TabListe[indice]);
else
supprimer_element_reference(p);
}
else
printf("\n%d n'existe pas dans la liste\n",x);
}
/*** Question 8 exercice 2***/
struct liste Transvider ( )
{
struct liste L;
unsigned i;
struct cellule *p;
creer_liste(&L);
for (i = 0; i < N; i++)
{
p = TabListe[i].premier;
while (p != NULL)
{
inserer_apres_dernier(&L, p->info);
p = p->suivant;
}
}
return L;
}
int main()
{
int x;
struct cellule * p;
struct liste L;
/***Test de la question 1***/
CreerTabListe ( );
/***Test de la question 3***/
RemplirTabListe ( );
/***Test de la question 4***/
AfficheTabListe ( );
/***Test de la question 5***/
x = 2236;
AjouterElement(x, fff);
printf("\nAjout de l'élément %d dans la liste %d\n", x, fff(x));
AfficheTabListe();
/***Test de la question 6***/
// Recherche d'un élément
x = 2236;
p = Rechercher(x, fff);
if (p != NULL)
printf("\nL'élément %d se trouve dans la liste %d à partir de l'adresse %p\
n", x, fff(x),p);
else
printf("\nL'élément %d n'est pas présent dans la structure TabListe\n", x);
/***Test de la question 7***/
// Suppression d'un élément
x = 1356;
SuppElement(x, fff);
printf("\nSuppression de l'élément %d de la liste %d\n", x, fff(x));
AfficheTabListe();
/***Test de la question 8***/
// Création d'une liste transvidée
L = Transvider();
printf("Liste transvidée\n");
affiche(L);
}

Vous aimerez peut-être aussi