循环队列就是只有固定的内存,存数据,出数据,但是也和队列一样,先进先出。如下图所示,这是他的样子
在head出,tail进,但是这个如果用数组解决的话,就有问题,力扣给我们的接口有一个判空和判满,如果我们k等于4,那创造一个大小为4的数组,head和tail都等于0,所以队尾等于,tail减一,当head和tail相等时,该数组为空,但是当这个数组满了的时候,head和tail也是相等的,那怎么办呢?我们有两个解决方案,第一,设置一个size,第二,给数组多创建一个空间,如果k为4,那我们就把数组的大小设置为5。这样,我们实际上k的大小不变,但是每次都会多留一个空间,让head和tail保持不同。
这样就很好的解决了判空和判满冲突的问题。那么问题又来了,我们该如何解决回绕的问题呢,答案就是模上k加一,我们来分析一下, 想要插入4,这时tail等于4,我们再插入数据,就要面对回绕问题,所以我们将tail加一模上k加一如果小于k加一的话,数字不变,但是等于k加一的话,就会等于0。这样,tail就很巧妙的回到了下标为0的地方。很好的解决了回绕的困扰。
这样我们的顾虑都解决了,所以我们看看代码吧。