一维数组实现环形队列

环形队列:
初始化头指针front=0
初始化尾指针rear=0
要求是add数据时我就尾指针rear后移一位并指向新add进来的数据, get数据时我就头指针front后移一位, 保持在第一个数据的前一位.
并且能够利用front和rear判断出队列现在是不是空或者满, 还有判断出队列中现在有几个数据.

首先,判断是否为空,由于初始状态就是空,不难看出,只要当头(f )指针追上了尾指针(r )就是为空。也即是rear = front

可是, 怎么判断是否为满呢?
尾指针r 差一步就追上头指针f 时, 就是满的情况.也就是(r+1)%Max == f
也就是说, 无论如何都会有一个内存被浪费.

最后, 利用头尾指针判断队列中有几个数据, 由以上分析可知, 尾指针rear和头指针front存在错位, 而且rear在front后面, 于是rear – front的差值就是数据的个数啦, 可是, 随着对队列的写读操作, rear的物理位置会变成在front前面, 虽然我们自己知道rear指向的是队列尾, 但是这时rear – front 的差值就不是数据的个数了, 会变成负数并且意思代表差几个位就追上头指针.

也即是说, rear – front会代表两个意思, 正数时就代表数据的个数, 负数时就代表差几个位就追上头指针. 这时要设计一种算法, 可以让rear – front等于负数时也能表示数据的个数, 算法同样也很简单; 就是(rear – front + maxSize) % maxSize

猜你喜欢

转载自blog.csdn.net/weixin_45032905/article/details/121054610