previous | index | next

Queue ADT Implementation

     (define enqueue!
       (lambda (queue new-item)
	 (let ((length (queue-length queue))
	       (start (queue-start queue))
	       (cells (queue-cells queue)))
	   (if (= length (vector-length cells))
	       (begin
		 (enlarge-queue! queue)
		 (enqueue! queue new-item))
	       (begin  ; maintain representation invariant
		 (vector-set! cells
			      (remainder (+ start length)
					 (vector-length cells))
			      new-item)
		 (set-queue-length! queue (+ length 1))
		 queue)))))
Writing dequeue is Exercise 13.11.

previous | index | next