Учебники

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.

Вывод вышеуказанной программы будет следующим.