基于数组的队列实现

本文介绍了一个基于数组实现的队列数据结构,包括队列的基本操作如初始化、压入、弹出等,并通过测试用例验证了队列的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先建立头文件“qa.h”

/* 基于数组的队列实现*/
#ifndef _QA_H
#define _QA_H
#include <sys/types.h>
/* 队列 */
typedef struct Queue {
	int*   arr;   /* 数组 */
	size_t cap;   /* 容量 */
	size_t front; /* 前端(弹出) */
	size_t rear;  /* 后端(压入) */
	size_t size;  /* 数量 */
}	QUEUE;
/* 分配内存空间并初始化为空队列 */
void queue_init (QUEUE* queue, size_t cap);
/* 释放内存空间并恢复到初始状态 */
void queue_deinit (QUEUE* queue);
/* 判断是否满 */
int queue_full (QUEUE* queue);
/* 判断是否空 */
int queue_empty (QUEUE* queue);
/* 压入 */
void queue_push (QUEUE* queue, int data);
/* 弹出 */
int queue_pop (QUEUE* queue);
/* 队首 */
int queue_front (QUEUE* queue);
/* 数量 */
size_t queue_size (QUEUE* queue);
#endif /* _QA_H */

函数实现部分“qa.c”

/* 基于数组的队列 */
#include <stdlib.h>
#include "qa.h"
/* 分配内存空间并初始化为空队列 */
void queue_init (QUEUE* queue, size_t cap) {
	queue->arr = malloc (cap * sizeof (int));
	queue->cap = cap;
	queue->front = 0;
	queue->rear = 0;
	queue->size = 0;
}
/* 释放内存空间并恢复到初始状态 */
void queue_deinit (QUEUE* queue) {
	free (queue->arr);
	queue->arr = NULL;
	queue->cap = 0;
	queue->front = 0;
	queue->rear = 0;
	queue->size = 0;
}
/* 判断是否满 */
int queue_full (QUEUE* queue) {
	return queue->size >= queue->cap;
}
/* 判断是否空 */
int queue_empty (QUEUE* queue) {
	return ! queue->size;
}
/* 压入 */
void queue_push (QUEUE* queue, int data) {
	if (queue->rear >= queue->cap)
		queue->rear = 0;
	++queue->size;
	queue->arr[queue->rear++] = data;
}
/* 弹出 */
int queue_pop (QUEUE* queue) {
	if (queue->front >= queue->cap)
		queue->front = 0;
	--queue->size;
	return queue->arr[queue->front++];
}
/* 队首 */
int queue_front (QUEUE* queue) {
	if (queue->front >= queue->cap)
		queue->front = 0;
	return queue->arr[queue->front];
}
/* 数量 */
size_t queue_size (QUEUE* queue) {
	return queue->size;
}

测试用例“qa_test.c”

/* 基于数组的队列 */
#include <stdio.h>
#include "qa.h"
/* 测试用例 */
int main (void) {
	QUEUE queue;
	queue_init (&queue, 4);
	int i;
	for (i = 10; i <= 40; i += 10)
		if (! queue_full (&queue))
			queue_push (&queue, i);
	for (i = 0; i < 2; ++i)
		if (! queue_empty (&queue))
			printf ("%d\n", queue_pop (&queue));
	for (i = 50; i <= 60; i += 10)
		if (! queue_full (&queue))
			queue_push (&queue, i);
	while (! queue_empty (&queue))
		printf ("%d\n", queue_pop (&queue));
	queue_deinit (&queue);
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值