Priority queue: Difference between revisions

R: return key and value
(R: return key and value)
Line 3,546:
keys <- values <- NULL
insert <- function(key, value) {
insert.orderord <- findInterval(key, keys)
keys <<- append(keys, key, insert.orderord)
values <<- append(values, value, insert.orderord)
}
pop <- function() {
head <- list(key=keys[1],value=values[[1]])
values <<- values[-1]
keys <<- keys[-1]
Line 3,567:
pq$insert(2, "Tax return")
while(!pq$empty()) {
printwith(pq$pop(), cat(key,":",value,"\n"))
}</lang>With output:<lang R>[1] ": Solve RC tasks"
[1]2 : "Tax return"
[1]3 : "Clear drains"
[1]4 : "Feed cat"
[1]5 : "Make tea"</lang>A similar implementation using R5 classes:<lang R>PriorityQueue <-
setRefClass("PriorityQueue",
fields = list(keys = "numeric", values = "list"),
methods = list(
insert = function(key,value) {
insert.order <- findInterval(key, keys)
keys <<- append(keys, key, insert.order)
values <<- append(values, value, insert.order)
},
pop = function() {
head <- list(key=keys[1],value=values[[1]])
keys <<- keys[-1]
values <<- values[-1]
return(head)
},
empty = function() length(keys) == 0
))</lang>The only change in the example would be in the instantiation:<lang R>pq <- PriorityQueue$new()</lang>.
 
=={{header|Racket}}==
136

edits