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

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

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

结果以下:
在这里插入图片描述算法