Untitled

 avatar
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