
Data Structure

This illustrates a data structure, a means of storing data within a program.

You may see other such structures in the Data Structures category.
 Illustration of FIFO behavior
Task

Implement a FIFO queue.

Elements are added at one side and popped from the other in the order of insertion.



Operations:

   push   (aka enqueue)    - add element
   pop     (aka dequeue)    - pop first element
   empty                             - return truth value when empty


Errors:

   handle the error of trying to pop from an empty queue (behavior depends on the language and platform)


See

   Queue/Usage   for the built-in FIFO or queue of your language or standard library.


See also

 Array
 Associative array: Creation, Iteration
 Collections
 Compound data type
 Doubly-linked list: Definition, Element definition, Element insertion, List Traversal, Element Removal
 Linked list
 Queue: Definition, Usage
 Set
 Singly-linked list: Element definition, Element insertion, List Traversal, Element Removal
 Stack


import extensions;
 
template queue<T>
{
    T[]  theArray;
    int  theTop;
    int  theTale;
 
    constructor()
    {
        theArray := new T[](8);
        theTop := 0;
        theTale := 0;
    }
 
    bool empty()
        = theTop == theTale;
 
    push(T object)
    {
        if (theTale > theArray.Length)
        {
            theArray := theArray.reallocate(theTale)
        };
 
        theArray[theTale] := object;
 
        theTale += 1
    }
 
    T pop()
    {
        if (theTale == theTop)
            { InvalidOperationException.new:"Queue is empty".raise() };
 
        T item := theArray[theTop];
 
        theTop += 1;
 
        ^ item
    }
}
 
public program()
{
    queue<int> q := new queue<int>();
    q.push(1);
    q.push(2);
    q.push(3);
    console.printLine(q.pop());
    console.printLine(q.pop());
    console.printLine(q.pop());
    console.printLine("a queue is ", q.empty().iif("empty","not empty"));
    console.print("Trying to pop:");
    try
    {
        q.pop()
    }
    catch(Exception e)
    {
        console.printLine(e.Message)
    }
}