【发布时间】:2018-05-26 09:37:45
【问题描述】:
我正在 Racket 中寻找满足以下定义的优先级队列,尤其是粗体部分(来自维基百科):
优先级队列是一种抽象数据类型,类似于常规队列或堆栈数据结构,但其中每个元素都有一个与之关联的“优先级”。在优先级队列中,优先级高的元素先于优先级低的元素提供服务。 如果两个元素具有相同的优先级,则按照它们在队列中的顺序提供服务。
我理解(并且确实想要)的是,它们是按照添加到队列中的顺序提供服务的。
我已经尝试过 Racket 的 data/heap,但如果优先级相同,这不会保持正确的顺序。
测试代码:
#lang racket
(require data/heap)
(define h (make-heap
(λ (p1 p2)
(<= (car p1) (car p2)))))
(define (add! p) (heap-add! h p))
(add! '(1 a))
(add! '(2 b))
(add! '(3 c))
(add! '(3 d))
(add! '(3 e))
(add! '(3 f))
(add! '(3 g))
(add! '(3 h))
(add! '(3 i))
(for ([p (in-heap h)])
(display p))
输出:
(1 a)(2 b)(3 h)(3 g)(3 f)(3 e)(3 d)(3 c)(3 i)
我需要以下输出:
(1 a)(2 b)(3 c)(3 d)(3 e)(3 f)(3 g)(3 h)(3 i)
【问题讨论】:
-
这似乎是另一种语言的相同问题:stackoverflow.com/questions/6909617/…
标签: racket