队列的工作原理很简单,因为和现实生活中的队列一模一样。比如你在食堂窗口排队做饭,先到就先做饭,你做完饭我再做饭。
队列操作只有两种:队列入口和队列出口。将元素添加到队列中称为入队。从队列中取出一个元素,称为出列,如下图1所示。
图1
根据队列的工作原理,在图1所示的队列中,丁灿只被添加到队列的末尾,而第一个A将第一个离开队列。
接下来,我们使用VBA代码来实现队列。
队列结构需要两个类模块:QueueItem类模块和队列类模块。
QueueItem类模块
在QueueItem类模块中,存储了一个数据值和指向下一个元素的指针。代码如下:
下一个队列元素。
公共下一个项目作为队列项目
队列中当前元素的值。
作为变体的公共价值
队列类模块
在队列类模块中,有两个方法和一个属性。Add方法将元素添加到队列中,即执行入队操作。Remove方法移除队列中的元素,即执行出列操作;QueueEmpty属性确定队列是否为空。完整的代码如下:
指向队列列头的指针。
将qFront调暗为队列项目
指向队列列末尾的指针。
将队列作为队列项变暗
加入团队。
公共子添加(varNewItem AsVariant)
声明并创建新元素。
将qNew调暗为新队列项目
为新元素赋值。
qNew。Value=varNewItem
如果队列为空,前后指针都指向新元素。
如果队列为空,则
设置qFront=qNew
设置qRear=qNew
其他
将最后一个元素指针指向新元素。
设置qRear。NextItem=qNew
指向指向队列列末尾的新元素。
设置qRear=qNew
如果…就会结束
末端接头
离开队伍。
移除队列列头部的元素并返回其值。
公共函数移除()作为变量
如果队列为空,则返回空。
如果队列为空,则
移除=空
其他
获取队列列标题元素值。
移除=qFront。价值
如果队列中只有一个元素。
删除后队列为空。
如果前面是,那么
设置qFront=无
设置qRear=无
其他
设置qFront=qFront。下一个项目
如果…就会结束
结束条件
结束功能
判断队列是否为空。
属性获取队列空值()为布尔值
如果队列为空,则返回真。
QueueEmpty=((qFront什么也不是)和(qRear什么也不是))
结束属性
假设原来的队列是“A、B、C”,现在应该在队列中加入“D”。在Add方法中,第一个教师创建一个新节点并赋值,如下图2所示。
图2。
然后,进行连接,如下图3所示。
图3。
如果在添加新元素之前队列是空的,队列的头和尾都指向新元素,如下图4所示。
图4
删除元素时,从队列的头部开始,如下图5所示。原来,qFront指向a,现在指向B.
图5
队列类模块代码的图片版本如下:
例子
下面的例子只是演示了队列。第一个代码教师形成一个队列,依次向队列中添加“A-B-D”,然后移除队列中的元素。
创建新队列。
作为新队列模糊数量
子测试队列()
带qTest
加入团队。添加“a”。添加“b”。加上“c”。添加“d”。
调试。打印“出列序列:”
离开队伍。
不做就做。队列空
调试。打印。移除()
环
以…结尾
末端接头
运行结果如下图6所示。可见离队顺序和入队顺序是一样的。
图6