一、顺序队列原理 概述:队列也是用于做数据处理,在队列的一端对数据项进行存入操作,称为入队,在队列的另一端对数据项进行取出操作,称之为出队,符合先进先出的特性。 头指针:用于指向队列里第一个元素的位置,也就是下次要出队元素所在的位置。 尾指针:用于指向队列里最后一个元素的后一个位置,也就是下次入队元素要存放的位置。 满队:尾指针已超出队尾位置。 空队:队列里没有元素或者所有元素都被取出。 入队:入队一次,向队列内存入一个元素,同时尾指针后移一个位置。队列处于满队状态时,不能入队。 出队:出队一次,从队列内取出一个元素,同时头指针后移一个位置。队列处于空队状态时,不能出队。 二、顺序队列程序设计 1、入队程序设计 流程设计: 1)检查是否有入队命令 如果有,则接着判断入队条件,即队列是否处于满队状态; 如果没有入队命令,则结束程序。 2)判断队列是否处于满队状态 如果是,则进入入队异常处理; 如果不是,则进入入队操作。 3)入队操作向队列中存入元素;尾指针后移。 4)入队异常处理 输出故障状态和状态代码。 2、出队程序设计 流程设计: 1)检查是否有出队命令 如果有,则接着判断出队条件,即队列是否处于空队状态; 如果没有出队命令,则结束程序。 2)判断队列是否处于空队状态 如果是,则进入出队异常处理; 如果否,则进入出队操作。 3)出队操作从队列中取出元素;头指针后移。 4)出队异常处理 输出故障状态和状态代码。 3、复位程序设计 复位功能:当需要清空队列空间,重新使用时,则进行复位操作。 流程设计: 检查是否有复位命令:如果有,复位头指针和尾指针;如果没有,则结束程序。 4、整体程序设计 三、顺序队列程序块与代码 1、程序接口设计 输入:Push:入队命令,触发入队操作Pop:出队命令,触发出队操作reset:复位命令,触发复位操作 输入输出:item:入队出队元素,数据项变量quene:队列空间,采用数组进行存储 输出:error:故障状态,当入队或出队异常时,errortruestatus:状态代码,当入队或出队异常时,显示相应代码 2、入队程序代码 满队状态判断:队列数组:ARRAY【0。。n】尾指针:i满队状态:in1 3、出队程序代码 空队状态判断队列数组:ARRAY【0。。n】头指针:i尾指针:j空队状态:ij 四、改进队列 1、改进队列的原理 顺序队列面临的问题: 基本顺序队列,使用尾指针指向存入元素位置,使用头指针指向取出元素位置。按照队列的先进先出特性,每次元素出队列后,头指针后移,直至头指针尾指针,表示空队状态。此时,之前的出队元素所占空间虽然被释放,但是空闲的存储空间却无法被继续使用,造成顺序队列的存储空间的浪费。 因而,需要对顺序队列进行改进,保证元素出队操作后,将队列元素整体前移到队头,占用之前移出元素后空闲的空间。这样尾指针也会随之前移,保证队列的使用效率。 因为,每次出队操作后,均将队列元素整体迁移至队头,故而出队的元素始终在队头位置,无需再使用头指针指向取出元素的位置。所以,在改进程序时,只保留一个指针,即尾指针指向存入元素位置即可。 2、出队程序的改进设计 队列元素是连续的区域,对于连续区域的整体移动在PLC程序里可以使用块移动指令,也可以使用循环语句逐个移动元素达到整体移动的目标。 五、总结