思路
说到队列,第一个想到的无非就是他的特性,先进先出,队列就好比我们日常生活中等待叫号,先取号的号总是在后取号的人前面被叫到号,那么这个业务逻辑就可以用队列来实现,而今天讲的队列叫循环队列,他一种顺序存储结构,故需要开辟一片数组空间用于存放数据。同时引入了头指针和尾指针的两个概念。
那么就要思考一个问题:当我定义存储空间大小为6的数组,那么当我插入到一定个数的时候,队满,如果再添加元素,指针就会指向空间外,从而引发因数组越界而导致程序的非法错误操作,那么基于此我们就引入了循环队列的概念。
附上图片进行理解
那么就可以知道基本操作:
入队:尾指针向后移动
出队:头指针向后移动
判空:头指针的值 == 尾指针的值? (这里的值指的是索引值)
判满:(尾指针的索引值+1)%数组的最大长度 == 头指针的索引值?
因为要对队列进行判满,所以需要牺牲一块存储空间才可以判断;
附上代码