西门子SCL编程实例-栈的实现算法

上一篇文章我们介绍了队列这种数据结构及实现队列的算法。今天这篇文章,我们来介绍下栈(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
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章