上一篇文章我们介绍了队列这种数据结构及实现队列的算法。今天这篇文章,我们来介绍下栈(stack)。
栈也是一种数据结构,它的特点是数据后入先出(Last In First Out,LIFO)或者说是先入后出,意思是一样的。栈有三个基本动作:初始化、入栈和出栈。接下来给大家介绍下我使用SCL语言编写的栈函数FB5018_Stack_Real,它以不定长数组作为存储区,以实数作为数据类型,实现了栈的初始化、入栈和出栈的操作。
在博途环境下新建函数块FB5018_Stack_Real,声明变量如下:
其中:
init:当该参数的值为真时,将栈初始化,内部上升沿信号处理;
push:当该参数的值为真时,将数据data入栈,内部上升沿信号处理;
pop:当该参数的值为真时,将数据出栈到dataQ,内部上升沿信号处理;
data:要入栈的数据;
done:操作完成(该信号会保持,当操作出错后会复位);
error:操作出错;
dataQ:从栈中出来的数据;
counter:栈中数据的数量;
errCode:错误代码(1=存储区满,3=存储区空);
buffer:不定长数组,要操作的数据源;
statStackPointer:栈指针(静态变量);
说明:由于初始化、入栈和出栈的动作均采用上升沿信号处理,为了便于观察,每次操作完成后done信号会保持,若操作出错后会复位。
由于代码比较长,我将其分区处理,如下面的图片所示:
//初始化
//栈信号判断
//数据处理
//输出
在使用前,先进行初始化,然后再进行数据入栈/出栈的操作。
这个函数块我已经测试过了,如果你有任何问题,欢迎留言。下面是我在OB1中的测试代码,使用之前介绍的随机数生成函数:
下面是西门子SCL编程的文章归档链接:
我的书《西门子S7-1200/1500 PLC SCL语言编程 ——从入门到精通》从硬件到软件,比较详细的介绍了SCL语言的编程,感兴趣的话可以扫描下面的二维码查看:
发表评论
我买了书,有群吗?有问题请教
请在公众号founderchip底部留言,此处为公开留言,不方便留联系方式。