Fifo.h
作用:建立一个非同步的标准队列的数据结构,实现队列的基本操作。(入队、出队、是否为空、队列长度)
实现:
基本实现:通过模板类实现;用T ** tab 存储实际元素,in,out做两个指针,size存储空间大小(不是队列大小),是个循环队列。
动态扩展循环队列的长度:队列的初始长度为maxUrlsBySite(40),在构造函数中使用。当队列长度不够时(在入队中判断),将队列长度变为原来的两倍,将原来的数值拷贝过去。删除原tab,参见代码: void Fifo<T>::put (T *obj)。这种方法在标准模板库的vector容器的设计中也使用到。
求循环队列的长度:(in-out+size)%size。这里处理的很巧妙。参见代码:int Fifo<T>::getLength ()
如果in在后,out在前,则length=in-out;(配图1)
如果in在前,out在后,则length=in+size-out;(配图2)
这里统一用了(in+size-out)%size