作者 | 主题 |
---|---|
'Razor 至圣 经验值:20130 发帖数:2777 精华帖:23 |
楼主 2023-07-27 18:30:28
主题:你找到牛鼻子了吗?——由复现FC_Stack所想 前几天论坛里新发了一帖子,里面有关于栈的内容,说FIFO栈,我心存疑惑,于是回翻老书,复习了一下栈stack相关的内容,确实是有点儿生疏了;再加上另外在微信平台看到一位师傅的SCL教程系列里面的一篇SCL实现栈FB的文章,于是也决定使用PLC代码再复现一下这基础的栈及相关的操作,采用全局DB+FC,相较常规以FB实现的方式,使用FC实现的话,有点儿坑,不过还好,功能完全复现了。 效果图如下 相较西门子常用状态字错误字的做法,我没有效仿,因为我想更直观地看到状态的变化,所以就直接全部采用了位变量。 关于栈这种基础的数据类型,常用也常见的操作就那么几样,reset/push/pop/getTop/getTopPointer/getDeepth/getSize/isFull/isEmpty,小计9种,栈变体在此处暂且不论。 ---------------------------------------------------------------------------------------------------- 如何找到牛鼻子并牢牢地牵住它? ---------------------------------------------------------------------------------------------------- 牛鼻子是什么?牛鼻子是毛竹上面的那道细微的裂纹,是那团线团里的线头。 那栈的鼻子又在哪儿呢? 靠着那可怜地C语言基础,开始考虑应该如何编写PLC代码,从哪里下手? 先进行的isFull/isEmpty判断,怎么实现? 最原始的“比较”操作,里面的值和空栈初始值比较,数组遍历嘛,没问题。 其它操作无非就是push写、pop读后顺便再写个初始值进去,如何确定读写的具体位置? 开辟的buffer的形式是数组,使用数组索引变量吗?行,但是不是姓何的嫁给姓郑的——郑何氏,最多,它只能算是牛鼻子里的鼻毛! 谁是牛鼻子?栈顶指针! 栈顶指针通过什么获得,通过借助索引变量遍历数组和初始值比较获得。
Less is more……
|