int main(void) { int i; int p; pqueue_t *pq; node_t *ns; node_t *n; /* We will need (N + 1) slots in "pris" vector. Extra one slot for spare * usages. */ pris = malloc(5 * sizeof(int *)); for (i = 0; i < 5; i++) pris[i] = malloc(2 * sizeof(int)); pris[0][0] = 4; pris[0][1] = 2; pris[1][0] = 3; pris[1][1] = 7; pris[2][0] = 3; pris[2][1] = 1; pris[3][0] = 5; pris[3][1] = 6; p = 4; /* Initialize spare slot. */ pq = pqueue_init(10, cmp_pri, get_pri, set_pri, get_pos, set_pos); ns = malloc(4 * sizeof(node_t)); ns[0].pri = 0; ns[0].val = 0; pqueue_insert(pq, &ns[0]); ns[1].pri = 1; ns[0].val = 1; pqueue_insert(pq, &ns[1]); ns[2].pri = 2; ns[0].val = 2; pqueue_insert(pq, &ns[2]); ns[3].pri = 3; ns[0].val = 3; pqueue_insert(pq, &ns[3]); printf("initial:\n"); pqueue_print(pq, stdout, pr_node); n = pqueue_pop(pq); printf("[pop] pri: %d, val: %d, real-pri: [%d %d]\n", n->pri, n->val, pris[n->pri][0], pris[n->pri][1]); printf("after first pop:\n"); pqueue_print(pq, stdout, pr_node); pris[p][0] = 3; pris[p][1] = 0; pqueue_change_priority(pq, p, &ns[3]); /* 3: (5,6) -> (3,0) */ p = 3; /* Move spare slot to 3. */ printf("after 3: (5,6) -> (3,0):\n"); pqueue_print(pq, stdout, pr_node); pris[p][0] = 3; pris[p][1] = -1; pqueue_change_priority(pq, p, &ns[0]); /* 0: (4,2) -> (3,-1) */ p = 0; /* Move spare slot to 0. */ printf("after 0: (4,2) -> (3,-1):\n"); pqueue_print(pq, stdout, pr_node); while ((n = pqueue_pop(pq))) printf("[pop] pri: %d, val: %d, real-pri: [%d %d]\n", n->pri, n->val, pris[n->pri][0], pris[n->pri][1]); pqueue_free(pq); free(ns); free(pris); return 0; }
void pqueue_delete(pqueue_t *q, int ind) { pqueue_change_priority (q, ind, INT_MIN); deleteMin (q); }