普通队列的实现

普通队列是比较容易实现的,但有几个问题需要注意一下:

 

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),同样是非常快速的

 

 

 

提醒自己..以后实现队列全部使用第二种方法,并合理的估计队列最大长度,最好取幂值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值