Une liste doublement chaînée est implémentée comme suit. Cette structure de données permet d'enregistrer un ensemble d'éléments, en liant pour chacun une clé à une valeur. On va faire l'hypothèse dans cette question qu'il n'y a qu'un seul exemplaire de chaque clé dans la liste.
typedef struct node { int key; double value; struct node* next; struct node* prev; } node_t; typedef struct list { node_t* head; node_t* tail; } list_t; list_t* create_list() { list_t* list = (list_t*) malloc(sizeof(list_t)); if (list == NULL) { return NULL; } list->head = NULL; list->tail = NULL return list; } int insert(list_t* list, int key, double value) { node_t* node = (node_t*) malloc(sizeof(node_t)); if (node == NULL) { return -1; } node->key = key; node->value = value; node->next = NULL; if (list->tail == NULL) { list->head = node; node->prev = NULL; } else { list->tail->next = node; node->prev = list->tail; } list->tail = node return 0; } void free_list(list_t* list) { node_t* current = list->tail; if (current == NULL) { free(list); return; } while (current->prev != NULL) { current = current->prev; free(current->next); } free(current); free(list); }
Vous devez implémenter la fonction delete
dont les spécifications vous sont fournies.