普通队列是比较容易实现的,但有几个问题需要注意一下:
1.f和e的含义如何
此处,我们为了统一格式,做一个统一的处理,f指向队首,e指向队尾的下一个元素,也就是说,出队时,先取q[f],然后递增f;入队时,先入队q[e],再递增e
这仅仅是我的统一格式..便于和其他数据结构统一...要不然就弄混了就恶心了..每次都得斟酌一二..
2.如何判断为空
如果我们自信自己开的队列空间是不会占满的,那么自然可以使用f<e来判断是否为空
但一个更好的方法是记录一下队列中的元素数量q_count,当q_count==0时,表示队列为空.
后一种方法节约空间,而且保证没有二义性
(最好加上越界判断..q_count!=0 && q_count<MAX_QUEUE_NUM)
3.如何递增f和e
同上,第一种就是直接+1,非常简单明了
第二中就是+1取模,f=(f+1)%MAX_QUEUE_NUM,e=(e+1)%MAX_QUEUE_NUM,虽然慢了一点,但优点同上
这就又涉及到一个MAX_QUEUE_NUM的取值.如果我们的MAX_QUEUE_NUM可以取2的幂值,那么我们的取模运算完全可以用&运算来代替
n%MAX_QUEUE_NUM = n&(MAX_QUEUE_NUM - 1),同样是非常快速的
提醒自己..以后实现队列全部使用第二种方法,并合理的估计队列最大长度,最好取幂值