previous | index | next

Queue ADT Implementation

     (define make-queue
       (lambda ()
	 (let ((cells (make-vector 8)) ; 8 is arbitrary
	       (header (make-vector 3)))
	   (set-queue-length! header 0)
	   (set-queue-start! header 0) ; arbitrary start
	   (set-queue-cells! header cells)
	   header)))

     (define empty-queue?
       (lambda (queue)
	 (= (queue-length queue) 0)))

     (define head
       (lambda (queue)
	 (if (empty-queue? queue)
	     (error "attempt to take head of an empty queue")
	     (vector-ref (queue-cells queue)
			 (queue-start queue)))))

previous | index | next