Rexx - Стеки
Стек иногда называют внешней очередью данных, но мы следуем общему использованию и называем его стеком. Это блок памяти, логически внешний по отношению к Rexx. Такие инструкции, как push и queue, помещают данные в стек, а такие инструкции, как pull и parse pull, извлекают из него данные. Встроенная функция очереди сообщает, сколько элементов находится в стеке.
Давайте посмотрим на пример стека.
/* 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
Первый цикл do в программе помещает в стек три строки данных. Для этого он использует инструкцию push. Мы нумеруем строки так, чтобы при их извлечении в порядке LIFO их порядок был очевиден.
Элементы, помещенные в стек инструкцией push, извлекаются в порядке LIFO -
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
Поскольку три элемента были помещены в стек посредством push, они извлекаются в порядке LIFO.
Результат вышеупомянутой программы будет следующим.
STACK: LINE #3
STACK: LINE #2
STACK: LINE #1