#include<stdio.
h>
#include<stdlib.h>
struct noeud {
int donnee;
struct noeud*suiv;
};
typedef struct noeud* list;
list inserer_noeud(list tete,int x)
{list nouv =(list)malloc (sizeof(struct noeud));
nouv->donnee=x;
nouv->suiv=tete;
tete=nouv;
return tete;
}
list creation_tete()
{
list nouv;
list tete=NULL;
int nb,v;
printf("donner le nombre des noeuds");
scanf("%d",&nb);
for(int i=1;i<=nb;i++)
{printf("donner la valeur de donner");
scanf("%d",&v);
list nouv=(list)malloc(sizeof(struct noeud));
nouv->donnee=v;
nouv->suiv=tete;
tete=nouv;
}
return tete;
}
void affichage(list tete){
list p;
p=tete;
while(p!=NULL)
{printf("%d",p->donnee);
p=p->suiv;
}
}
list creation_en_queue(list*tete){
int nb;
list r,q;
tete=NULL;
printf("entrer le nombre des noeuds");
scanf("%d",&nb);
for(int i=0;i<nb;i++){
r=(list)malloc (sizeof(struct noeud));
scanf("%d",r->donnee);
if(tete=NULL){
tete=r;
q=r;
} else{
q->suiv=r;
q=r;}}
q->suiv=NULL;
return tete;}
void affichage2(list*tete){
list p;
p=tete;
if(tete=NULL){
printf("la liste est vide");
}
else{while(p!=NULL){
printf("%d",p->donnee);
p=p->suiv;
}
}
}
list creation_circulaire(list *tete) {
int nb;
list r, q;
*tete = NULL;
printf("Entrer le nombre des noeuds : ");
scanf("%d", &nb);
for (int i = 0; i < nb; i++) {
r = (list)malloc(sizeof(struct noeud));
printf("Entrer la valeur du nœud : ");
scanf("%d", &(r->donnee));
if (*tete == NULL) {
*tete = r;
q = r;
} else {
q->suiv = r;
q = r;
}
}
q->suiv = *tete;
return *tete;
}
void affichage_circulaire(list* tete) {
list p;
p = tete;
if (tete == NULL) {
printf("La liste circulaire est vide\n");
} else {
while (p != tete);
printf("%d ", p->donnee);
p = p->suiv;
}
printf("%d",p->donnee);
}
list empiler(list tete, int x) {
list nouveau = (list)malloc(sizeof(struct noeud));
nouveau->donnee = x;
nouveau->suiv = tete;
tete = nouveau;
return tete;
}
// Fonction pour dépiler un nœud
list depiler(list tete) {
if (tete != NULL) {
list temp = tete;
tete = tete->suiv;
free(temp);
}
return tete;
}
// Fonction pour créer une liste chaînée en utilisant une approche de pile
list creer_liste_en_utilisant_pile() {
list tete = NULL;
int nb, v;
printf("Entrez le nombre de nœuds : ");
scanf("%d", &nb);
for (int i = 1; i <= nb; i++) {
printf("Entrez la valeur du nœud : ");
scanf("%d", &v);
tete = empiler(tete, v);
}
return tete;
}
// Fonction pour afficher la liste chaînée
void afficher_list(list tete) {
list p;
p = tete;
while (p != NULL) {
printf("%d ", p->donnee);
p = p->suiv;
}
printf("\n");
}
// Fonction pour ajouter un nœud à la file
list enfiler(list *tete, int x) {
list nouveau = (list)malloc(sizeof(struct noeud));
nouveau->donnee = x;
nouveau->suiv = NULL;
if (*tete == NULL) {
*tete = nouveau;
} else {
list p = *tete;
while (p->suiv != NULL) {
p = p->suiv;
}
p->suiv = nouveau;
}
return *tete;
}
// Fonction pour retirer un nœud de la file
list defiler(list *tete) {
if (*tete != NULL) {
list temp = *tete;
*tete = (*tete)->suiv;
free(temp);
}
return *tete;
}
// Fonction pour créer une liste chaînée en utilisant une approche de file
list creer_liste_en_utilisant_file() {
list tete = NULL;
int nb, v;
printf("Entrez le nombre de nœuds : ");
scanf("%d", &nb);
for (int i = 1; i <= nb; i++) {
printf("Entrez la valeur du nœud : ");
scanf("%d", &v);
tete = enfiler(&tete, v);
}
return tete;
}
// Fonction pour afficher la liste chaînée
void afficher_liste(list tete) {
list p;
p = tete;
while (p != NULL) {
printf("%d ", p->donnee);
p = p->suiv;
}
printf("\n");
}
int main() {
list tete = NULL;
int choix;
do {
printf("\nMenu :\n");
printf("1. Créer une liste en tête\n");
printf("2. Afficher la liste\n");
printf("3. Créer une liste en queue\n");
printf("4. Afficher la liste (alternative)\n");
printf("5. Créer une liste circulaire\n");
printf("6. Afficher la liste circulaire\n");
printf("7. Créer une liste en utilisant une pile\n");
printf("8. Afficher la liste (pile)\n");
printf("9. Créer une liste en utilisant une file\n");
printf("10. Afficher la liste (file)\n");
printf("0. Quitter\n");
printf("Entrez votre choix : ");
scanf("%d", &choix);
switch (choix) {
case 1:
tete = creation_tete();
break;
case 2:
affichage(tete);
break;
case 3:
tete = creation_en_queue(&tete);
break;
case 4:
affichage2(&tete);
break;
case 5:
tete = creation_circulaire(&tete);
break;
case 6:
affichage_circulaire(&tete);
break;
case 7:
tete = creer_liste_en_utilisant_pile();
break;
case 8:
afficher_list(tete);
break;
case 9:
tete = creer_liste_en_utilisant_file();
break;
case 10:
afficher_liste(tete);
break;
case 0:
printf("Au revoir !\n");
break;
default:
printf("Choix invalide. Veuillez réessayer.\n");
}
} while (choix != 0);
// Libérer la mémoire (nettoyage)
while (tete != NULL) {
tete = depiler(tete);
}
return 0;
}