Rexx - 堆栈



堆栈有时被称为外部数据队列,但我们遵循常用用法,将其称为堆栈。它是一块逻辑上位于 Rexx 外部的内存块。像 push 和 queue 这样的指令将数据放入堆栈,而像 pull 和 parse 这样的指令则从中提取数据。queued 内置函数报告堆栈中有多少项。

让我们来看一个堆栈的例子。

/* 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

下一个代码块显示了使用 queued 内置函数来发现堆栈中行数,以及使用循环从堆栈中检索所有行的用法 -

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   
广告