Stacks

优质
小牛编辑
132浏览
2023-12-01

堆栈有时称为外部数据队列,但我们遵循常见用法并将其称为堆栈。 它是一块逻辑上在Rexx外部的内存块。 像push和queue这样的指令将数据放入堆栈,拉取和解析等指令从中提取数据。 排队的内置函数报告堆栈中有多少项。

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

/* 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顺序检索它们时,它们的顺序是明显的。

通过推送指令放入堆栈的项目在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

由于这三个项目是通过推送放在堆栈上的,因此它们是以LIFO顺序检索的。

上述程序的输出如下。

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