单向队列和循环队列(c)

单向队列
队列可分为顺序表队列 也可以为链式队列,这里小编为了便于理解,是用顺序表做队列,队列是一种先进先出的数据结构,它的特性是只能在一段进行入队(添加数据操作 对头),在另一端进行出对(删除,读取操作 队尾); 分别设三个属性 最大容量(capaticy),头指针(head) 尾指针tail, 队列的长度为tail-head 这幅图是模拟了一个队列的四种状态:,
单向队列和循环队列(c)
因此,可以看到 队列满的情况 tail <= capicity,队空 : head = tail
代码如下:
单向队列和循环队列(c)
单向队列和循环队列(c)
单向队列和循环队列(c)

单向队列和循环队列(c)
下面 我们实验一下插入30个元素,然后再出队
单向队列和循环队列(c)
由于我们队列的最大容量为10 所以当第十一个元素如对的时候 此时队列已经满了,后面全部出队的时候,队列当中已经空了
循环队列
单向队列和循环队列(c)
这里我们采用linux内核所采用的算法,循环是逻辑上的循环,每次入队时,tail = (tail+1)%N 每次出队是 head=(head+1)%N 这样,当head=tail时 此时队列就空了 ,那么 队满时,head=(tail+1)%N ,队列当中始终留一个空位不存放元素,那么对空和队满的条件如上图所示
代码如下:
单向队列和循环队列(c)
单向队列和循环队列(c)
单向队列和循环队列(c)
单向队列和循环队列(c)

结果如下:
单向队列和循环队列(c)