85 lines
1.2 KiB
Racket
85 lines
1.2 KiB
Racket
#lang scribble/manual
|
|
@(require (for-label racket))
|
|
|
|
@title{PriorityQueue}
|
|
Priority queue data structure@section{categories}
|
|
Collections>Ordered
|
|
|
|
@section{description}
|
|
|
|
PriorityQueue implements a priority queue data structure, which is used to build schedulers. It allows you to put in items at some arbitrary time and pop them in
|
|
time order.
|
|
|
|
@section{INSTANCEMETHODS}
|
|
|
|
@section{private}
|
|
prInternalArray
|
|
|
|
|
|
@section{method}
|
|
put
|
|
Puts the item in the queue at the given time.
|
|
|
|
@section{method}
|
|
topPriority
|
|
Returns the time of the earliest item in the queue.
|
|
|
|
@section{method}
|
|
pop
|
|
Returns the earliest item in the queue.
|
|
|
|
@section{method}
|
|
clear
|
|
Empty the queue.
|
|
|
|
@section{method}
|
|
isEmpty
|
|
Return a link::Classes/Boolean:: whether the queue is empty.
|
|
|
|
@section{method}
|
|
notEmpty
|
|
Return a link::Classes/Boolean:: whether the queue is not empty.
|
|
|
|
@section{method}
|
|
removeValue
|
|
Remove all instances of value from the queue.
|
|
|
|
|
|
@section{EXAMPLES}
|
|
|
|
|
|
|
|
@racketblock[
|
|
(
|
|
var p;
|
|
p = PriorityQueue.new;
|
|
|
|
p.put(0.1, \a);
|
|
p.put(2.0, \b);
|
|
p.put(0.5, \c);
|
|
p.put(0.2, \d);
|
|
p.put(1.0, \e);
|
|
|
|
while ({ p.notEmpty },{
|
|
[p.topPriority, p.pop].postln;
|
|
});
|
|
|
|
|
|
p.pop.postln;
|
|
p.pop.postln;
|
|
p.pop.postln;
|
|
|
|
)
|
|
|
|
[ 0.1, a ]
|
|
[ 0.2, d ]
|
|
[ 0.5, c ]
|
|
[ 1, e ]
|
|
[ 2, b ]
|
|
nil
|
|
nil
|
|
nil
|
|
::
|
|
]
|
|
|
|
|