单向队列
队列可分为顺序表队列 也能够为链式队列,这里小编为了便于理解,是用顺序表作队列,队列是一种先进先出的数据结构,它的特性是只能在一段进行入队(添加数据操做 对头),在另外一端进行出对(删除,读取操做 队尾); 分别设三个属性 最大容量(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
结果以下:
算法