Untitled
unknown
plain_text
a year ago
4.4 kB
8
Indexable
#include <stdio.h> #include <stdlib.h> // Définition de la structure Node struct Noeud { int data; struct Noeud* next; }; // Définition de la structure ListeChainee struct ListeChainee { struct Noeud* head; int size; }; // Fonction pour créer un nouveau nœud struct Noeud* creerNoeud(int data) { struct Noeud* newNode = (struct Noeud*)malloc(sizeof(struct Noeud)); newNode->data = data; newNode->next = NULL; return newNode; } // Fonction pour initialiser la liste chaînée void initialiserListe(struct ListeChainee* liste) { liste->head = NULL; liste->size = 0; } // Insérer le premier nœud void insererPremier(struct ListeChainee* liste, int data) { struct Noeud* newNode = creerNoeud(data); newNode->next = liste->head; liste->head = newNode; liste->size++; } // Insérer le dernier nœud void insererDernier(struct ListeChainee* liste, int data) { struct Noeud* newNode = creerNoeud(data); if (liste->head == NULL) { liste->head = newNode; } else { struct Noeud* current = liste->head; while (current->next != NULL) { current = current->next; } current->next = newNode; } liste->size++; } // Insérer à l'index (n'importe où entre) void insererA(struct ListeChainee* liste, int data, int index) { if (index > liste->size) { printf("Cet index est hors de portée\n"); return; } if (index == 0) { insererPremier(liste, data); return; } struct Noeud* newNode = creerNoeud(data); struct Noeud* current = liste->head; struct Noeud* previous = NULL; int count = 0; while (count < index) { previous = current; current = current->next; count++; } newNode->next = current; previous->next = newNode; liste->size++; } // Obtenir à l'index void obtenirA(struct ListeChainee* liste, int index) { if (index >= liste->size) { printf("Cet index est hors de portée\n"); return; } struct Noeud* current = liste->head; int count = 0; while (current != NULL) { if (count == index) { printf("%d\n", current->data); return; } current = current->next; count++; } } // Supprimer à l'index void supprimerA(struct ListeChainee* liste, int index) { if (index >= liste->size) { printf("Cet index est hors de portée, vous ne pouvez pas le supprimer\n"); return; } struct Noeud* current = liste->head; struct Noeud* previous = NULL; int count = 0; if (index == 0) { liste->head = current->next; } else { while (count < index) { previous = current; current = current->next; count++; } previous->next = current->next; } free(current); liste->size--; } // Vider la liste void viderListe(struct ListeChainee* liste) { struct Noeud* current = liste->head; struct Noeud* nextNode; while (current != NULL) { nextNode = current->next; free(current); current = nextNode; } liste->head = NULL; liste->size = 0; } // Imprimer les données de la liste void imprimerDonneesListe(struct ListeChainee* liste) { struct Noeud* current = liste->head; while (current != NULL) { printf("%d\n", current->data); current = current->next; } } // Vérifier si la liste est vide int estVide(struct ListeChainee* liste) { return liste->head == NULL; } // Supprimer le premier nœud void supprimerTete(struct ListeChainee* liste) { if (liste->head != NULL) { struct Noeud* temp = liste->head; liste->head = liste->head->next; free(temp); liste->size--; } } int main() { struct ListeChainee liste; initialiserListe(&liste); insererPremier(&liste, 100); insererDernier(&liste, 200); insererA(&liste, 300, 2); // obtenirA(&liste, 1); // supprimerA(&liste, 2); // viderListe(&liste); // imprimerDonneesListe(&liste); // printf("La liste est-elle vide ? %d\n", estVide(&liste)); supprimerTete(&liste); imprimerDonneesListe(&liste); return 0; }
Editor is loading...
Leave a Comment