Untitled
unknown
plain_text
a year ago
4.4 kB
9
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