首页 新闻 会员 周边

循环队列的判断有效个数的问题

0
[已解决问题] 解决于 2019-12-27 17:11

最近在学数据结构
用数组做循环队列的时候,说道:
队列满的标志是:(rear+1)%maxSize == front
队列为空的标志是:rear==front

这种方式我看了书,也看了视频,都是说的这种办法,因为约定了 队列头与队列尾除了初始化时的0,都不会在同一个索引下。这就造成了,在队列满的时候,有一个数组的空间是空的,不能用来存储,比如定义了队列里的数组是5,实际只能存4个元素。否则rear == front 就不能用来判断队列是空是满

我想的办法是,干脆直接定义一个size变量,用于存储有多少个有效数据。
每新增一个元素,size+1 每取走一个元素 size-1.这样不仅判断是空是满都方便了,而且我根本不用特意空出一个空间来保证,rear == front 就是队列空。这样队列的数组空间可以被充分利用了。

可能这种办法也早就有人想到了,但是我觉得,这么简单的想法,既然视频没说到,书里也没有说到,那会不会是这种办法存在什么问题呢?求大神帮助解答一下。谢谢!!!

lukely的主页 lukely | 初学一级 | 园豆:147
提问于:2019-08-17 12:06
< >
分享
最佳答案
1

首先,个人觉得用size标记是可以的,程序结果是正常的,没有问题。
但是这样会多消耗一些时间,我认为 教材这么写应该是为了 "用空间换时间"。
假如在加队列或者出队列的时候,我们需要维护size变量(比如size++; or size--;) 这样就多了一步操作,虽然复杂度上面只是常数发生了变化。但是对于出队,入队操作数很多的情况来说,复杂度也增加了不少,比如说出队和入队次数 是 100w,那么要多维护一个size,就要多100W次对size的操作,所以我们牺牲一个数组的空间去缩短运行时间,我觉得更好,毕竟现在内存大,运行时间更宝贵。以上的个人看法,如果有错误请指正。

奖励园豆:5
Jinke2017 | 菜鸟二级 |园豆:237 | 2019-08-20 10:06
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册