Queue/Definition: Difference between revisions

added a Common Lisp solution
(added a Common Lisp solution)
Line 577:
}
</lang>
 
=={{header|Common Lisp}}==
 
This defines a queue structure that stores its items in a list, and maintains a tail pointer (i.e., a pointer to the last cons in the list). Note that dequeuing the last item in the queue does not clear the tail pointer—enqueuing into the resulting empty queue will correctly reset the tail pointer.
 
<lang lisp>(defstruct (queue (:constructor %make-queue))
(items '() :type list)
(tail '() :type list))
 
(defun make-queue ()
"Returns an empty queue."
(%make-queue))
 
(defun queue-empty-p (queue)
"Returns true if the queue is empty."
(endp (queue-items queue)))
 
(defun enqueue (item queue)
"Enqueue item in queue. Returns the queue."
(prog1 queue
(if (queue-empty-p queue)
(setf (queue-items queue) (list item)
(queue-tail queue) (queue-items queue))
(setf (cdr (queue-tail queue)) (list item)
(queue-tail queue) (cdr (queue-tail queue))))))
 
(defun dequeue (queue)
"Dequeues an item from queue. Signals an error if queue is empty."
(if (queue-empty-p queue)
(error "Cannot dequeue from empty queue.")
(pop (queue-items queue))))</lang>
 
=={{header|D}}==
Anonymous user