队列是数据结构的一种,数据存储方式为先进先出。
什么是队列:队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。(摘自百度百科)
队列的实现:
功能实现:
int queue_init(Queue *queue,size_t cap){//队列初始化(创建) queue->base = calloc(cap,sizeof(QT)); if(queue->base == NULL){ return 0; } queue->cap = cap; queue->first = 0; queue->size = 0; return 1;}int queue_is_empty(Queue *queue){//队列是否为空 return queue->size == 0;}int queue_is_full(Queue *queue){//队列是否为满 return queue->size == queue->cap;}QT queue_pop(Queue *queue){//入队操作 if(queue_is_empty(queue)){ return NULL; } if(queue->first == queue->cap){ queue->first = 0; } --queue->size; return *(queue->base+ queue->first++);}QT queue_top(Queue *queue){//获取队顶元素 if(queue_is_empty(queue)){ return NULL; } return *(queue->base + (queue->first+queue->size-1)%queue->cap);}void queue_push(Queue *queue,QT data){//出队操作 if(!queue_is_full(queue)){ *(queue->base+(queue->first+queue->size++)%queue->cap) = data; }}void queue_destroy(Queue *queue){//销毁队列 free(queue->base);}void queue_clear(Queue *queue){//队列清空 queue->size = 0; queue->first = 0;}队列也很简单