zoukankan      html  css  js  c++  java
  • 有限状态机(Finite-state machine, FSM)的C语言实现

    有限状态机,也称为FSM(Finite State Machine),其在任意时刻都处于有限状态集合中的某一状态。当其获得一个输入字符时,将从当前状态转换到另一个状态,或者仍然保持在当前状态。任何一个FSM都可以用状态转换图来描述,图中的节点表示FSM中的一个状态,有向加权边表示输入字符时状态的变化。如果图中不存在与当前状态与输入字符对应的有向边,则FSM将进入“消亡状态(Doom State)”,此后FSM将一直保持“消亡状态”。状态转换图中还有两个特殊状态:状态1称为“起始状态”,表示FSM的初始状态。状态6称为“结束状态”,表示成功识别了所输入的字符序列。

    在启动一个FSM时,首先必须将FSM置于“起始状态”,然后输入一系列字符,最终,FSM会到达“结束状态”或者“消亡状态”。

    有限状态机(Finite-state machine, FSM)的C语言实现

    状态机的要素

    状态机可归纳为4个要素,即现态、条件、动作、次态。“现态”和“条件”是因,“动作”和“次态”是果。

    • 现态:是指当前所处的状态。

    • 条件:又称为“事件”。当一个条件被满足,将会触发一个动作,或者执行一次状态的迁移。

    • 动作:条件满足后执行的动作。动作执行完毕后,可以迁移到新的状态,也可以仍旧保持原状态。动作不是必需的,当条件满足后,也可以不执行任何动作,直接迁移到新状态。

    • 次态:条件满足后要迁往的新状态。“次态”是相对于“现态”而言的,“次态”一旦被激活,就转变成新的“现态”了。

    c语言实现

    直接先上个图,就按照这个状态来写:

    有限状态机(Finite-state machine, FSM)的C语言实现

    当事件是1的时候,进入的是周一,它的下一个状态是周二。依次类推

    • 定义我们上图的状态

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 继续定义出触发的事件

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 定义状态表的数据结构

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 定义出FSM的状态表

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 状态机的注册和状态转移

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 事件处理的动作实现

    有限状态机(Finite-state machine, FSM)的C语言实现

    • 再在主函数中调用就好了。

    看完整的代码:

    有限状态机(Finite-state machine, FSM)的C语言实现

    运行的效果:

    有限状态机(Finite-state machine, FSM)的C语言实现

    有限状态机(Finite-state machine, FSM)的C语言实现

  • 相关阅读:
    面试题6 重建二叉树
    面试题5 从尾到头打印链表
    面试题4 替换空格
    面试题3 二维数组中查找
    面试题2 单例
    C++ 强制类型转换
    C++ 11 新特性
    STL 函数对象
    STL 算法
    OpenSSH多路复用Multiplexing配置
  • 原文地址:https://www.cnblogs.com/jiangzhaowei/p/9129024.html
Copyright © 2011-2022 走看看