A significant aspect of Abstract Data Types is that they explain the properties of a data structure without specifying the details of its implementation. The properties might be implemented independent of any implementation in any programming language.
Queue is a set of elements, or items, for which the given operations are defined:
createQueue(Q) : It create an empty queue Q;
isEmpty(Q): is a boolean type predicate which returns ''true'' if Q exists and is empty, and returns ''false'' otherwise;
addQueue(Q,item) adds the given item to the queue Q; and deleteQueue (Q, item) : delete an item through the queue Q;
next(Q) eliminate the least recently added item which remains in the queue Q, & returns it as the value of the function;
isEmpty (createQueue(Q)) : It is always true, and deleteQueue(createQueue(Q)) : error
The primitive isEmpty(Q) is needed to know whether the queue is empty or not, Since calling next on an empty queue must cause an error. Like stack, the situation might be such while the queue is "full" in the case of a finite queue. But we ignore defining this here as it would based on the real length of the Queue defined in a particular problem.
The word "queue" is like the queue of customers at counter for any service, wherein customers are dealt along with in the order where they arrives i.e. first in first out (FIFO) order. In most of the cases, in the queue the first customer is the first to be served.
As pointed out previous, Abstract Data Types define the properties of a structure without indicating an implementation in any way. Therefore, an algorithm that works with a "queue" data structure will work wherever this is implemented. Usually different implementations are of different efficiencies.