FIFO(First in First out),插入在表的一端进行,而删除在表的另一端进行,我们将这种数据结构称为队或者队列(就像排队一样,排在前面的先出,很形象)
允许插入的一端称为队尾(rear),允许删除的一端称为(front)
通常我们用得较多的是循环队列
也就是当rear达到fifo的最大值后又指向下标为0的位置。
这里会存在一个问题:正常是根据front==rear判断是否为空,在这里队列为满时,也是front==rear,那怎么区分呢?
方法一:通过标志位,当front==rear时,flag为1,队列满,否则为空
方法二:队列满的条件改为front == rear + 1,也就是队列满时,保留一个元素空间
实际设计中通常会定义数据结构:
struct Fifo_Queue_Tag
{
SlotDataType Data[FIFO_SIZE];
QueStdSizeType front;
QueStdSizeType rear;
}FifoQueueType;
主要操作:
(1)队列初始化:Init_Queue(q)
初始条件: 队q 不存在。
操作结果: 构造了一个空队。
(2)入队操作: In_Queue(q,x),
初始条件: 队q 存在。
操作结果: 对已存在的队列q,插入一个元素x 到队尾,队发生变化。
(3)出队操作: Out_Queue(q,x)
初始条件: 队q 存在且非空
操作结果: 删除队首元素,并返回其值,队发生变化。
(4)判队空操作:Empty_Queue(q)
初始条件: 队q 存在
操作结果: 若q 为空队则返回为1,否则返回为0。