Vorrei implementare un heap binario in c (ho appena finito di studiare la parte di teoria dal libro di algoritmi). Ho definito il seguente header:
La struttura dati che ho usato per implementare l'albero dell'heap è un'array (come nel libro) in cui il figlio sinistro del nodo i si trova in posizione (2*i + 1) e il figlio destro in posizione (2*i + 2).
Ho implementato correttamente tutte le operazioni tranne
Dal libro vedo che questa operazione può essere implementata nel seguente modo:
C:
typedef struct max_heap_t *max_heap_ptr;
max_heap_ptr max_heap_create(size_t element_size, size_t key_size, int (*key_compare)(void *a, void *b));
size_t max_heap_get_nitems(max_heap_ptr heap);
void max_heap_insert(max_heap_ptr heap, void *element_ptr, void *key_ptr);
void max_heap_max(max_heap_ptr heap, void *element_ptr);
void max_heap_extract_max(max_heap_ptr heap, void *element_ptr);
void max_heap_increase_key(max_heap_ptr heap, void *element_ptr, void *new_key_ptr);
void max_heap_free(max_heap_ptr heap);
La struttura dati che ho usato per implementare l'albero dell'heap è un'array (come nel libro) in cui il figlio sinistro del nodo i si trova in posizione (2*i + 1) e il figlio destro in posizione (2*i + 2).
Ho implementato correttamente tutte le operazioni tranne
max_heap_increase_key
.Dal libro vedo che questa operazione può essere implementata nel seguente modo:
- Trova il nodo contenente l'elemento e.
- Incrementa la chiave di tale nodo a k
- Richiama la procedura per ripristinare la proprietà di un heap tramite scambi ripetuti tra nodi (che ho implementato correttamente)