英文网站建设知识,网站建设与管理logo,邢台网红,wordpress本地上传插件多次遇到环形队列的情况#xff0c;记不住什么情况是队列满#xff0c;什么情况是队列空。一直也没有理解透彻。
仔细研究了一下#xff0c;掌握了一些原理#xff0c;记录一下。 1. 环形队列有一个头指针head#xff0c;一个为指针tail。有一个疑问#xff1a;head和ta…多次遇到环形队列的情况记不住什么情况是队列满什么情况是队列空。一直也没有理解透彻。
仔细研究了一下掌握了一些原理记录一下。 1. 环形队列有一个头指针head一个为指针tail。有一个疑问head和tail分别指向哪里。网上搜的教材有的简单说head指向队首tail指向队尾。有的说head指向第一个元素的位置tail指向最后一个元素的下一个位置。有的说head指向下一个要写入的位置tail指向下一个要读取的位置。感觉非常乱。观察了几个实例感觉可以约定不同的规则不同的规则会造成判断队列空和队列满的判断方法。
下面以head指向下一个要写入的位置tail指向下一个要读取的位置。为例
2. 那环形队列初始化状态肯定是空的空的时候就是headtail0的状态。那满的状态是啥样的呢假定数据从一开始一直写入从来没有读取tail一直为0按道理应该是转一圈headtail0的时候可是这样就无法分清楚是满还是空。于是就再约定最多只能保存MAXN-1个数据。这样当head再增加一个的时候就认为队列满了。head再增加1那么head又会和tail指向同一个位置0。如果用单纯的head1tail肯定不正确因为比如MAXN10当队列满的时候head为99为下一个要写入的位置而并没有写入数据。head1等于10。此时队列满了。这就需要对(head1)%MAXN的操作。当tail head1%MAXN的时候队列满。