Rexx - Pilhas

A pilha às vezes é chamada de fila de dados externa, mas seguimos o uso comum e nos referimos a ela como pilha. É um bloco de memória logicamente externo à Rexx. Instruções como push e queue colocam dados na pilha, e instruções como pull e parse pull extraem dados dela. A função embutida enfileirada relata quantos itens estão na pilha.

Vamos dar uma olhada em um exemplo de pilha.

/* STACK: */
/* */ 
/* This program shows how to use the Rexx Stack as either a */ 

/* stack or a queue. */ 
do j = 1 to 3 
push ‘Stack: line #’ || j 

/* push 3 lines onto the stack */ 
end 
do j = 1 to queued() 

/* retrieve and display LIFO */ 
pull line 
say line 
end 
do j = 1 to 3 queue ‘Queue: line #’ || j 

/* queue 3 lines onto the stack */ 
end 
do queued() 

/* retrieve and display FIFO */ 
pull line 
say line 
end 
exit 0

O primeiro loop do no programa coloca três linhas de dados na pilha. Ele usa a instrução push para fazer isso. Numeramos as linhas para que, quando recuperadas na ordem LIFO, sua ordem seja aparente.

Os itens colocados na pilha pela instrução push são recuperados na ordem LIFO -

do j = 1 to 3 
push ‘Stack: line #’ || j     /* push 3 lines onto the stack */ 
end

O próximo bloco de código mostra o uso da função embutida enfileirada para descobrir o número de linhas na pilha, bem como um loop para recuperar todas as linhas da pilha -

do j = 1 to queued()    /* retrieve and display LIFO */ 
pull line 
say line 
end

Como os três itens foram colocados na pilha por push, eles são recuperados no pedido UEPS.

A saída do programa acima será a seguinte.

STACK: LINE #3 
STACK: LINE #2 
STACK: LINE #1