软件开发中常用数据结构介绍:C语言队列

工作之余来写写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);

}

感谢对本期内容不遗余力的学习,下期内容即将奉上,欢迎下次光临!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

汽车测试M哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值