队列
顺序循环队列
问题:
- 在使用循环队列时,会出现front == rear 对应队列为空或者队列满的情况
解决:
- 设置一个标志位: 当队列为空时,flag = 0,当队列满时,flag = 1;
- 当队列为空时,front == rear,当队列满时,修改其条件,空出一个元素空间
实现:
- 结构体
|
|
- 初始化:
|
|
- 队列长度
|
|
- 入队操作
|
|
- 出队操作
|
|
链式队列
- 结构体:
|
|
- 入队操作
|
|
- 出队操作
|
|
对比:
时间上:
- 两者的基本操作的时间复度都是O(1)
- 对于循环队列来说,事先申请好空间,试用期间不释放
- 对于链队列来说,每次申请和释放结点也会存在一些时间开销
- 如果入队频繁的话,两者还是有细微差别
空间上
- 循环队列需要事先确定一个长度,所以就有了储存个数和空间浪费的问题
- 链队列则不存在上述问题,但是它需要指针域,也会在空间上产生一定的开销
- 总体来说,链队列在空间上更加灵活
总结
- 在确定队列长度的最大值的情况下,使用循环队列较为适宜,否则使用链队列比较适合
参考资料:《大话数据结构》
源码