数据结构-队列

队列

        特点:具有先进先出的特性。

        入队:将数据保存到队列的内存中,操作队尾(rear).

        出队:从队列的内存中取出数据,操作队首

队列头文件编写:

//queue.h:队列的各种声明
#ifndef QUEUE_H
#define QUEUE_H
//包含公共头文件
#include <stdio.h>
#include <stdlib.h>
//声明描述的结构体
typedef struct queue {
	int* arr;
	int cap;
	int size;
	int rear;
	int front;
}queue_t;
extern void queue_init(queue_t* queue, int cap);
extern void queue_deinit(queue_t* queue);
extern int queue_full(queue_t* queue);
extern int queue_empty(queue_t* queue);
extern void queue_push(queue_t* queue, int data);
extern int queue_pop(queue_t* queue);
extern int queue_size(queue_t* queue);
#endif

队列函数编写:

#include "queue.h"
void queue_init(queue_t* queue, int cap) {
	queue->arr = malloc(sizeof(int) * cap);
	queue->cap = cap;
	queue->size = 0;
	queue->rear = 0;
	queue->front = 0;
}
void queue_deinit(queue_t* queue) {
	free(queue->arr);
	queue->cap =0;
	queue->size = 0;
	queue->rear = 0;
	queue->front = 0;
}
int queue_empty(queue_t* queue) {
	return !queue->size;
}
int queue_full(queue_t* queue) {
	return !queue->size >= queue->cap;
}
void queue_push(queue_t* queue, int data) {
	if (queue->rear >= queue->cap)
		queue->rear = 0;
	queue->arr[queue->rear++] = data;
	queue->size++;
}
int queue_pop(queue_t* queue) {
	if (queue->front >= queue->cap)
		queue->front = 0;
	queue->size--;
	return queue->arr[queue->front++];
}
int queue_size(queue_t* queue) {
	return queue->size;
}

队列测试代码编写:

#include "queue.h"
int main(void) {
	queue_t queue;
	queue_init(&queue, 4);
	for (int i = 10; i <= 40; i += 10)
		if (!queue_full(&queue))
			queue_push(&queue, i);
	printf("有效个数是:%d\n", queue_size(&queue));
	for (int i = 0; i < 2; i++)
		if (!queue_empty(&queue))
			printf("%d",queue_pop(&queue));
	printf("\n");
	printf("有效个数是:%d\n",queue_size(&queue));
	for (int i = 50; i <= 60; i += 10)
		if (!queue_full(&queue))
			queue_push(&queue, i);
	while (!queue_empty(&queue))
		printf("%d", queue_pop(&queue));
	printf("\n");
	queue_deinit(&queue);
	return 0;
}

代码结果图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

summer 2000

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

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

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

打赏作者

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

抵扣说明:

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

余额充值