#include #include typedef struct Noeud { int valeur; struct Noeud* suivant; } Noeud; Noeud* ajoutTete(Noeud* teteliste, int n); Noeud* ajoutFin(Noeud* teteliste, int n); Noeud* ajoutKieme(Noeud* teteliste, int k, int n); Noeud* supprTete(Noeud* teteliste); Noeud* supprFin(Noeud* teteliste); Noeud* supprKieme(Noeud* teteliste, int k); void menu(); void afficher (Noeud* teteliste); int scanInt(char* question); int main() { int action; Noeud* teteliste = NULL; do { afficher (teteliste); printf("\n"); menu(); int res; do { res = scanf("%d",&action); char ch; while ((ch = getchar()) != '\n' && ch != EOF); } while (res!= 1); switch (action) { case 0: teteliste = ajoutTete(teteliste, scanInt("Saisir une valeur entiere: ")); break; case 1: teteliste = ajoutFin(teteliste, scanInt("Saisir une valeur entiere: ")); break; case 2: teteliste = ajoutKieme(teteliste, scanInt("Saisir une position: "), scanInt("Saisir une valeur entiere: ")); break; case 3: teteliste = supprTete(teteliste); break; case 4: teteliste = supprFin(teteliste); break;; case 5: teteliste = supprKieme(teteliste, scanInt("Saisir une position: ")); break; } } while (action !=6); return 0; } int scanInt(char* question) { printf("%s\n", question); int n; scanf("%d",&n); char ch; while ((ch = getchar()) != '\n' && ch != EOF); return n; } void afficher (Noeud* teteliste) { Noeud* l = teteliste; printf("Liste actuelle:\nteteliste = "); while (l!=NULL) { printf("%d --> ",l->valeur); l = l->suivant; } printf("NULL\n"); } Noeud* ajoutTete(Noeud* teteliste, int n) { Noeud* noeud = (Noeud*)malloc(sizeof(Noeud)); noeud->valeur = n; noeud->suivant = teteliste; return noeud; } Noeud* ajoutFin(Noeud* teteliste, int n) { Noeud* noeud = (Noeud*)malloc(sizeof(Noeud)); noeud->valeur = n; noeud->suivant = NULL; if (teteliste == NULL) return noeud; Noeud* l = teteliste; while (l->suivant!=NULL) { l = l->suivant; } l->suivant = noeud; return teteliste; } Noeud* ajoutKieme(Noeud* teteliste, int k, int n) { if (k<0) { printf("k negatif, ajout impossible\n"); return teteliste; } if (k==0) return ajoutTete(teteliste, n); if (teteliste == NULL) { printf("k trop grand, ajout impossible\n"); return teteliste; } Noeud* l = teteliste; while (l!=NULL && k>1) { l = l->suivant; k--; } if (l==NULL) { printf("k trop grand, ajout impossible\n"); return teteliste; } Noeud* noeud = (Noeud*)malloc(sizeof(Noeud)); noeud->valeur = n; noeud->suivant = l->suivant; l->suivant = noeud; return teteliste; } Noeud* supprTete(Noeud* teteliste) { if (teteliste == NULL) return NULL; Noeud* noeud = teteliste->suivant; free(teteliste); return noeud; } Noeud* supprFin(Noeud* teteliste) { if (teteliste == NULL) return NULL; if (teteliste->suivant == NULL) { free(teteliste); return NULL; } Noeud* l = teteliste; while (l->suivant->suivant!=NULL) { l = l->suivant; } free(l->suivant); l->suivant = NULL; return teteliste; } Noeud* supprKieme(Noeud* teteliste, int k) { if (k<0) { printf("k negatif, suppression impossible\n"); return teteliste; } if (k==0) return supprTete(teteliste); if (teteliste == NULL) { printf("k trop grand, suppression impossible\n"); return teteliste; } Noeud* l = teteliste; while (l->suivant!=NULL && k>1) { l = l->suivant; k--; } if (l->suivant==NULL) { printf("k trop grand, suppression impossible\n"); return teteliste; } Noeud* noeud = l->suivant; l->suivant = l->suivant->suivant; free(noeud); return teteliste; } void menu() { printf("0 - ajoutTete\n"); printf("1 - ajoutFin\n"); printf("2 - ajoutKieme\n"); printf("3 - supprTete\n"); printf("4 - supprFin\n"); printf("5 - supprKieme\n"); printf("6 - quitter\n"); }