A queue is a first-in, first-out (FIFO) data structure with two ends - a front end for deletion and a rear end for insertion. Elements are inserted at the rear of the queue and deleted from the front. A queue can be implemented using either an array or linked list. Basic queue operations include enqueue, which inserts at the rear, and dequeue, which removes from the front. A circular queue addresses overflow issues by making the queue circular so the rear can loop back to the front when full.