\begin{algorithm}
        \caption{Single Array Allocate and Free Objects}
        \begin{algorithmic}
        \REQUIRE An array $A$ representing all doubly linked list nodes and 
            variable $free$ indicating the head of free list
        \PROCEDURE{AllocateObject}{}
            \IF{$free == NIL$}
                \STATE \textbf{error} "out of space"
            \ELSE
                \STATE $x = free$
                \STATE $free = A[x + 1]$ \COMMENT{ $A[x + 1]$ is conceptually $x.next$ }
                \RETURN x
            \ENDIF
        \ENDPROCEDURE
        \STATE
        \PROCEDURE{FreeObject}{$x$}
            \STATE $A[x + 1] = free$ \COMMENT{ $A[x + 1]$ is conceptually $x.next$ }
            \STATE $free = x$
        \ENDPROCEDURE
        \end{algorithmic}
        \end{algorithm}