A queue is a linear data structure that follows the First In First Out (FIFO) principle, where elements are added to the rear of the queue and removed from the front. Elements can be added using the enqueue operation and removed using the dequeue operation. A queue can be implemented using an array or linked list. A circular queue was introduced to prevent wasted memory when the rear reaches the end of the array. Priority queues order elements by priority when removing them, with higher priority elements served first.