queue.scm 569 B

1234567891011121314151617181920212223242526272829
  1. ; Copyright (c) 1993-2007 by Richard Kelsey and Jonathan Rees. See file COPYING.
  2. ; Queues
  3. (define (make-queue)
  4. (cons '() '()))
  5. (define (queue-empty? q)
  6. (and (null? (car q))
  7. (null? (cdr q))))
  8. (define (enqueue! q obj)
  9. (set-car! q (cons obj (car q))))
  10. (define (dequeue! q)
  11. (normalize-queue! q)
  12. (let ((head (car (cdr q))))
  13. (set-cdr! q (cdr (cdr q)))
  14. head))
  15. (define (normalize-queue! q)
  16. (if (null? (cdr q))
  17. (begin (set-cdr! q (reverse (car q)))
  18. (set-car! q '()))))
  19. (define (queue-head q)
  20. (normalize-queue! q)
  21. (car (cdr q)))