工作之余来写写C语言相关知识,以免忘记。今天就来聊聊C语言实现循环队列,我是分享人M哥,目前从事车载控制器的软件开发及测试工作。
学习过程中如有任何疑问,可底下评论!
如果觉得文章内容在工作学习中有帮助到你,麻烦点赞收藏评论+关注走一波!感谢各位的支持!
今天给大家带来循环队列的实现代码,至于队列的实现原理,网络上有许多详细的解释,我这里就不在赘述,直接上代码;
1.queueCycle.h队列头文件
#ifndef QUEUECYCLE_H_
#define QUEUECYCLE_H_#define FALSE (0)
#define TRUE (1)/*定义循环队列结构*/
typedef struct Queue {int* data; /*队列元素*/int size; /*队列大小*/int front; /*队首*/int rear; /*队尾*/
}Queue_t;void queue_init(Queue_t* pQueue, int n);
int queue_is_empty(Queue_t* pQueue);
int queue_is_full(Queue_t* pQueue);
int queue_push(Queue_t* pQueue, int* data);
int queue_pop(Queue_t* pQueue, int* data);
int queue_get_front(Queue_t* pQueue, int* value);
void printfQueue(Queue_t* pQueue);#endif // !1
2.queueCycle.c队列函数实现
#include <stdio.h>
#include <stdlib.h>#include "queueCycle.h"void queue_init(Queue_t *pQueue, int n) {pQueue->data = (int*)malloc((n+1) * sizeof(int));pQueue->size = n + 1;pQueue->front = 0;pQueue->rear = 0;
}int queue_is_empty(Queue_t *pQueue) {return (pQueue->front == pQueue->rear); /*判断队列是否为空*/
}int queue_is_full(Queue_t *pQueue) {return (pQueue->front == (pQueue->rear + 1)%pQueue->size); /*判断队列是否满*/
}int queue_push(Queue_t *pQueue, int *data) {if (queue_is_full(pQueue)){printf("队列已满\n");return FALSE;}pQueue->data[pQueue->rear] = *data; /*入队列*/pQueue->rear = (pQueue->rear + 1) % (pQueue->size);return TRUE;
}int queue_pop(Queue_t* pQueue, int* data) {if (queue_is_empty(pQueue)){printf("队列为空\n");return FALSE;}*data = pQueue->data[pQueue->front];pQueue->front = (pQueue->front + 1) % (pQueue->size);return TRUE;
}int queue_get_front(Queue_t *pQueue, int *value) {if (queue_is_empty(pQueue)){return FALSE;}*value = pQueue->data[pQueue->front];return TRUE;
}void printfQueue(Queue_t *pQueue) {if (queue_is_empty(pQueue)){printf("队列为空\n");return FALSE;}while (pQueue->front != pQueue->rear) {printf("%d ", pQueue->data[pQueue->front]);pQueue->front = (pQueue->front + 1) % (pQueue->size);}
}
3.main.c主函数队列验证
#include <stdio.h>
#include <stdlib.h>#include "queueCycle.h"int main()
{int i,n = 5;int data = 0;Queue_t queue;queue_init(&queue, n);for (i = 1;i < 6;i++){queue_push(&queue, &i);}for (i = 1;i < 3;i++){queue_pop(&queue, &i);}queue_get_front(&queue, &data);printf("%d\n", data);/*for (i = 0;i < 5;i++){queue_pop(&queue, &i);printf("%d", i);}*/printfQueue(&queue);}
感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!