队列:限制在两端进行插入和删除的线性表
允许进行存入操作的一端为“队尾”
允许进行删除操作的一端为“队头”
顺序队列
注意:front指向队头元素的位置
rear指向队尾元素的下一个位置
实现循环队列:(rear+1)%N取余,为了区分空队和满队,满队元素个数比数组元素个数要少一
sequeue.h
queue_creat
enqueue
1、判断堆是否满
2、存数
dequeue
在返回值之前,要判断堆是否为空
queue_empty
queue_full
queue_clear
queue_free
链式队列
双端队列
插入操作在队尾进行,删除操作在队头进行,由队头指针和队尾指针控制队列的操作
linkqueue.h
queue_creat
enqueue
1、申请P,封装结点p
2、lq->rear->next = p
3、更新rear
dequeue
注意:当只有一个元素时,此时还要进行dequeue时,要进行将最后一个元素去掉,此时若rear不进行更改的话,rear将指向NULL,所以还要操作rear=front
还有一种思路:在每次dequeue时都删除front,并把dequeue的那个结点作为新的front
1、结点p指向lq的front
2、更新lq的front
3、释放p
queue_empty
queue_free
担心用户释放了链表还使用的话,返回链表指针
queue_clear
与queue_free不同是在while中