6.1
7 Binary Heaps
Binary heaps are a simple implementation of priority queues.
Operations on binary heaps are not thread-safe.
Makes a new empty heap using <=? to order elements.
Returns #t if x is a heap, #f otherwise.
Returns the number of elements in the heap.
Adds each v to the heap.
Adds each element contained in v to the heap, leaving
v unchanged.
Returns the least element in the heap h, according to the
heap’s ordering. If the heap is empty, an exception is raised.
Removes the least element in the heap h. If the heap is
empty, an exception is raised.
Removes v from the heap h if it exists.
Examples: |
> (define a-heap (make-heap string<=? string=?)) | make-heap: arity mismatch; | the expected number of arguments does not match the given | number | expected: 1 | given: 2 | arguments...: | #<procedure:string<=?> | #<procedure:string=?> | > (heap-add! a-heap "a" "b" "c") | | > (heap-remove! a-heap "b") | | > (for/list ([a (in-heap a-heap)]) a) | '("a" | "bifur" | "bofur" | "bombur" | "c" | "dori" | "dwalin" | "fili" | "fili" | "gloin" | "nori" | "oin" | "ori" | "thorin") |
|
|
Builds a heap with the elements from items. The vector is not
modified.
Examples: |
> (struct item (val frequency)) | | > (define (item<=? x y) | (<= (item-frequency x) (item-frequency y))) |
| | > (define some-sample-items | (vector (item #\a 17) (item #\b 12) (item #\c 19))) |
| | > (define a-heap (vector->heap item<=? some-sample-items)) | |
|
Returns a vector containing the elements of heap h in the
heap’s order. The heap is not modified.
Makes a copy of heap h.
Returns a sequence equivalent to
heap, maintaining the heap’s ordering.
The heap is consumed in the process. Equivalent to repeated calling
heap-min, then
heap-remove-min!.
Returns a sequence equivalent to
heap, maintaining the heap’s ordering.
Equivalent to
in-heap/consume! except the heap is copied first.
Sorts vector v using the comparison function <=?.
Examples: |
> (define terms (vector "batch" "deal" "flock" "good deal" "hatful" "lot")) | | > (heap-sort! terms string<=?) | | > terms | '#("batch" "deal" "flock" "good deal" "hatful" "lot") |
|