0% ont trouvé ce document utile (0 vote)
15 vues7 pages

Liste Uni Tda

Le document décrit la structure et les fonctions d'une liste unidirectionnelle en C, incluant des opérations pour créer, remplir, insérer, supprimer et afficher les éléments de la liste. Il présente également des tests pratiques pour démontrer l'utilisation de ces fonctions. Les fonctions incluent la gestion des éléments avant et après le premier et dernier, ainsi que la recherche et la suppression d'éléments référencés.

Transféré par

attigmohtadi1
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)
15 vues7 pages

Liste Uni Tda

Le document décrit la structure et les fonctions d'une liste unidirectionnelle en C, incluant des opérations pour créer, remplir, insérer, supprimer et afficher les éléments de la liste. Il présente également des tests pratiques pour démontrer l'utilisation de ces fonctions. Les fonctions incluent la gestion des éléments avant et après le premier et dernier, ainsi que la recherche et la suppression d'éléments référencés.

Transféré par

attigmohtadi1
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

/**** partie interface ******/

/*****Liste unidirectionnelle*/
struct cellule
{
int cle ;
struct cellule *suivant ;
};
struct liste
{
struct cellule * premier ;
struct cellule * dernier ;
} ;

/******Fonction creer_liste*******/
void creer_liste(struct liste *);
/******Fonction liste_vide*******/
int liste_vide(struct liste );
/******Fonction inserer_avant_premier******/
void inserer_avant_premier(struct liste * , int );
/**Fonction Remplir 1 en utilisant inserer_avant_premier**/
void remplir1(struct liste * );
/******Fonction inserer_apres_dernier******/
void inserer_apres_dernier(struct liste * , int );
/**Fonction Remplir 1 en utilisant inserer_aprés_dernier**/
void remplir2(struct liste *);
/****Fonction TAILLE***/
int taille(struct liste );
/**** Fonction recherche_référence****/
struct cellule * recherche_reference(struct liste , int );
/***Fonction affiche***/
void affiche(struct liste );
/****Fonction insertion après élément référencée*****/
void inserer_apres_reference(struct cellule * , int );
/****Fonction insertion avant élément référencée*****/
void inserer_avant_reference(struct cellule * , int );
/*****Fonction suppression du premier élément****/
void supprimer_premier( struct liste * );
/*****Fonction suppression du dernier élément****/
void supprimer_dernier( struct liste * );
/*****Fonction suppression d’un élément référencée******/
void supprimer_element_reference( struct cellule *);
/*****Fonction supprimer_apres_reference******/
void supprimer_apres_reference(struct cellule *);

void supprimer_avant_reference(struct liste *, struct cellule *);

/* partie implementation */
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
#include "liste.h"
/******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 [Link]==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->cle = 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 x;
unsigned rep,i=1;
do
{
printf("Donner un entier %d de la liste: ",i);
scanf("%d",&x);
inserer_avant_premier(L , x);
do
{
printf("Voulez vous inserer un autre entier ds la liste(1:oui,0:non):
");
scanf("%u",&rep);
}while(!(rep==1 || rep==0));
i++;
}while(rep);
}
/******Fonction inserer_apres_dernier******/
void inserer_apres_dernier(struct liste * L , int x)
{
struct cellule *p;
p = (struct cellule*)malloc(sizeof(struct cellule));
p->cle = 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 x;
unsigned rep,i=1;
do
{
printf("Donner un entier %d de la liste: ",i);
scanf("%d",&x);
inserer_apres_dernier(L,x);
do
{
printf("Voulez vous inserer un autre entier ds la liste(1:oui,0:non):
");
scanf("%u",&rep);
}while(!(rep==1 || rep==0));
i++;
}while(rep);
}
/****Fonction TAILLE***/
int taille(struct liste L)
{
struct cellule * p;
unsigned t=0;
if(liste_vide(L))
return(0);
else
{
p=[Link];
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=[Link];
while(p && p->cle!=x)
p= p->suivant;
return p;
}
/***Fonction affiche***/
void affiche(struct liste L)
{
struct cellule *q=[Link];
assert(!(liste_vide(L)));
while(q!=NULL)
{
printf("%d\t",q->cle);
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->cle = 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->cle = x ;
p->suivant=q;
}
/*****Fonction suppression du premier élément****/
void supprimer_premier( struct liste * L)
{
struct cellule * p;
assert(!(liste_vide(*L)));
p= L->premier;
L->premier = p->suivant;
free(p);
/* 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 */
assert(!(liste_vide(*L)));
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;
q=p->suivant;
p->suivant=q->suivant;
free(q);
}

void supprimer_avant_reference(struct liste *, struct cellule *p)


{
struct cellule * q=l->premier;
while(q->suivant!=p)
q=q->suivant;
supprimer_element_reference(q);
if(q->suivant==NULL)
l->dernier=q;
}
/****************Partie Test****************/
#include <stdio.h>
#include "liste.h"
int main()
{
int x,y;
struct liste L1,L2;
struct cellule * p;
creer_liste(&L1) ;
creer_liste(&L2) ;
/*****Remplissage de la liste L1*****/
printf("***Remplissage de la liste L1***\n");
remplir2(&L1);
/*****Remplissage de la liste L2*****/
printf("***Remplissage de la liste L2***\n");
remplir2(&L2);
printf("***Contenu de la liste L1***\n");
affiche(L1);
printf("La taille de la liste L1 = %u\n",taille(L1));
printf("***Contenu de la liste L2***\n");
affiche(L2);
printf("La taille de la liste L2 = %u\n",taille(L2));

/*****inserer_avant_premier un élément donné dans L1*****/


printf("****Inserer un %cl%cment donn%c avant le premier dans L1****\
n",130,130,130);
printf("Donner l'entier d'insertion : ");
scanf("%d",&y);
inserer_avant_premier(&L1,y);
printf("***Contenu de la liste L1 apr%cs insertion (avant premier)***\n",130);
affiche(L1);
printf("La taille de la liste L1 = %u\n",taille(L1));

/*****inserer_aprés_dernier un élément donné dans L2*****/


printf("****Inserer un %cl%cment donn%c apr%cs le dernier ds L2****\
n",130,130,130,130);
printf("Donner l'entier d'insertion : ");
scanf("%d",&y);
inserer_apres_dernier(&L2,y);
printf("***Contenu de L2 apr%cs insertion (apr%cs dernier)***\n",130,130);
affiche(L2);
printf("La taille de la liste L2 = %u\n",taille(L2));

/*****inserer_apres_ref. un élément donné ds L1(la référence est différente du


premier et dernier)*****/
printf("*inserer un %clt. apr%cs r%cf. ds L1(la r%cf. est diff. du premier et
dernier)*\n",130,130,130,130);
printf("Donner un entier de recherche : ");
scanf("%d",&x);
p=recherche_reference(L1,x);
if(p)
{
printf("%d existe dans L1 et son r%cf%crence =%x\n",x,130,130,p);
printf("Donner l'entier d'insertion : ");
scanf("%d",&y);
inserer_apres_reference(p,y);
printf("***Contenu de la liste L1 apr%cs insertion***\n",130);
affiche(L1);
printf("La taille de la liste L1 = %u\n",taille(L1));
}
else
printf("La r%cf%crence de %d n'existe pas dans L1 \n",130,130,x);

/*****inserer_avant_ref. un élément donné ds L2(la ré[Link] différente du


premier et dernier)*****/
printf("*inserer un %clt. avant r%cf. ds L2(la r%cf. est diff. du premier et
dernier)*\n",130,130,130);
printf("Donner un entier : ");
scanf("%d",&x);
p=recherche_reference(L2,x);
if(p)
{
printf("%d existe dans L2 et son r%cf%crence =%x\n",x,130,130,p);
printf("Donner l'entier d'insertion : ");
scanf("%d",&y);
inserer_avant_reference(p,y);
printf("***Contenu de L2 apr%cs insertion***\n",130);
affiche(L2);
printf("La taille de la liste L2 = %u\n",taille(L2));
}
else
printf("La r%cf%crence de %d n'existe pas dans L2\n",130,130,x);

/*****Suppression du premier élément de la liste L1*****/


printf("****Suppression du premier %cl%cment de L1 ****\n",130,130);
supprimer_premier(&L1);
printf("***Contenu de L1 apr%cs suppression premier***\n",130);
affiche(L1);
printf("La taille de la liste L1 = %u\n",taille(L1));

/*****Suppression du dernier élément de la liste L2*****/


printf("****Suppression du dernier %cl%cment de la liste L2****\n",130,130);
supprimer_dernier(&L2);
printf("***Contenu de L2 apr%cs suppression dernier***\n",130);
affiche(L2);
printf("La taille de la liste L2 = %u\n",taille(L2));

/**suppression d’un élément référencé de L1(la réf. est différente du premier


et dernier)**/
printf("*supp. d'1 %clt. %c partir d'1e r%cf donn%ce de L1/r%cf. diff. du
premier et dernier",130,133,130,130,130);
printf("Donner un entier : ");
scanf("%d",&x);
p=recherche_reference(L1,x);
if(p)
{
printf("%d existe dans L1 et son r%cf%crence =%x\n",x,130,130,p);
supprimer_element_reference(p);
printf("***Contenu de la liste L1 apr%cs suppression***\n",130);
affiche(L1);
printf("La taille de la liste L1 = %u\n",taille(L1));
}
else
printf("La r%cf%crence de %d n'existe pas dans L1\n",130,130,x);

/*****suppression d’un élément apres une réf. de L2(la référence est différente
du premier et dernier)******/
printf("*supp. d'1 %clt. apr%cs une r%cf donn%c de L2/r%cf. est diff. du
premier et dernier\n",130,130,130,130);
printf("Donner un entier : ");
scanf("%d",&x);
p=recherche_reference(L2,x);
if(p)
{
printf("%d existe dans L2 et son r%cf%crence =%x\n",x,130,130,p);
supprimer_apres_reference(p);
printf("***Contenu de L2 apr%cs suppression***\n",130);
affiche(L2);
printf("La taille de la liste L2 = %u\n",taille(L2));
}
else
printf("La r%cf%crence de %d n'existe pas dans L2\n",130,130,x);
return 0;
}

Vous aimerez peut-être aussi