工作之余来写写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);
}
感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!