35 #ifndef __priorityq_heap_h_
36 #define __priorityq_heap_h_
40 #define PQkey PQHeapKey
41 #define PQhandle PQHeapHandle
42 #define PriorityQ PriorityQHeap
44 #define pqNewPriorityQ(leq) __gl_pqHeapNewPriorityQ(leq)
45 #define pqDeletePriorityQ(pq) __gl_pqHeapDeletePriorityQ(pq)
60 #define pqInit(pq) __gl_pqHeapInit(pq)
61 #define pqInsert(pq,key) __gl_pqHeapInsert(pq,key)
62 #define pqMinimum(pq) __gl_pqHeapMinimum(pq)
63 #define pqExtractMin(pq) __gl_pqHeapExtractMin(pq)
64 #define pqDelete(pq,handle) __gl_pqHeapDelete(pq,handle)
65 #define pqIsEmpty(pq) __gl_pqHeapIsEmpty(pq)
80 typedef long PQhandle;
81 typedef struct PriorityQ PriorityQ;
83 typedef struct { PQhandle handle; } PQnode;
84 typedef struct { PQkey key; PQhandle node; } PQhandleElem;
88 PQhandleElem *handles;
92 int (*leq)(PQkey key1, PQkey key2);
95 PriorityQ *pqNewPriorityQ(
int (*leq)(PQkey key1, PQkey key2) );
96 void pqDeletePriorityQ( PriorityQ *pq );
98 void pqInit( PriorityQ *pq );
99 PQhandle pqInsert( PriorityQ *pq, PQkey key );
100 PQkey pqExtractMin( PriorityQ *pq );
101 void pqDelete( PriorityQ *pq, PQhandle handle );
104 #define __gl_pqHeapMinimum(pq) ((pq)->handles[(pq)->nodes[1].handle].key)
105 #define __gl_pqHeapIsEmpty(pq) ((pq)->size == 0)