FIFO(First-in ,First-out)队列在日常生活中很常见。当我们买票时,我们实际上遵守FIFO原则处理事情。类似的,计算机系统中常用FIFO队列保存那些希望先来先得到服务的任务。
FIFO队列包含两个基本操作:插入(put)一个新的项,删除(get)一个最早插入的项。
下面介绍两种FIFO队列的两种主要的实现方式:循环数组实现方式和链表实现方式。
(1)循环数组实现方式:
对于每一个队列数据结构,我们保留一个数组S,其最多存放的Nmax个元素,定义两个位置front和rear分别指向队列的头尾两端,此外我们用N来记录队列中实际存在的元素 的个数。
对于一个元素item入队,我们让N和rear增1,然后置s[rear]=item;
对于一个元素item入队,我们让N减1,让front增1.
注意:这种实现有一个潜在的问题。假设数组的Nmax=10,经过10次入队后,队列似乎已经满了,因为此时rear=9.然而,队列中可能只存在小于9个的元素,因为 之前入队的操作可能伴随着出队的操作。例如我们将1,2,3,4,5,6,7,8,9,10一次入队,然后又进行2次出队操作,此时front指向数组元素S[2]处的位置,此时队列中只 有8个元素,这时rear仍然指向数组的最后一个元素S[Nmax-1]的位置,此时我们有没有办法继续进行入队操作呢?
简单的解决方法是:只要front和rear到达数组的末尾,它就又绕回到开头,这种实现方式就是循环