\begin{algorithm}
        \caption{Double Ended Queue}
        \begin{algorithmic}
        \REQUIRE $Q$ is an array of length $Q.length$ indexed from $1$ with two attributes
                 $Q.head$ and $Q.tail$ initialized to be $1$
        \ENSURE Implementation of deque operations that handle overflow and underflow
        \STATE \COMMENT {Inserts elements to the front of deque.}
        \PROCEDURE{HeadEnqueue}{$Q, x$}
            \IF{\CALL{QueueFull}{$Q$}}
                \STATE \textbf{error} "overflow"
            \ELSE
                \IF{$Q.head == 1$}
                    \STATE $Q.head = Q.length$
                \ELSE
                    \STATE $Q.head = Q.head - 1$
                    \STATE $Q[Q.head] = x$
                \ENDIF
            \ENDIF
        \ENDPROCEDURE
        \STATE
        \STATE \COMMENT {Inserts elements to the back of deque.}
        \PROCEDURE{TailEnqueue}{$Q, x$}
            \IF{\CALL{QueueFull}{$Q$}}
                \STATE \textbf{error} "overflow"
            \ELSE
                \STATE $Q[Q.tail] = x$
                \IF{$Q.tail == Q.length$}
                    \STATE $Q.tail = 1$
                \ELSE
                    \STATE $Q.tail = Q.tail + 1$
                \ENDIF
            \ENDIF
        \ENDPROCEDURE
        \STATE
        \STATE \COMMENT {Deletes elements from the front of deque.}
        \PROCEDURE{HeadDequeue}{$Q$}
            \IF{\CALL{QueueEmpty}{$Q$}}
                \STATE \textbf{error} "underflow"
            \ELSE
                \STATE $x = Q[Q.head]$
                \IF{$Q.head == Q.length$}
                    \STATE $Q.head = 1$
                \ELSE
                    \STATE $Q.head = Q.head + 1$
                \ENDIF
                \RETURN $x$
            \ENDIF
        \ENDPROCEDURE
        \STATE
        \STATE \COMMENT {Deletes elements from the back of deque.}
        \PROCEDURE{TailDequeue}{$Q$}
            \IF{\CALL{QueueEmpty}{$Q$}}
                \STATE \textbf{error} "underflow"
            \ELSE
                \IF{$Q.tail == 1$}
                    \STATE $Q.tail = Q.length$
                \ELSE
                    \STATE $Q.tail = Q.tail - 1$
                \ENDIF
                \RETURN $Q[Q.tail]$
            \ENDIF
        \ENDPROCEDURE
        \end{algorithmic}
        \end{algorithm}