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.
INGInious