数据结构—队列

#include <stdio.h>
#include <stdlib.h>
typedef struct queue{
	int *arr;
	int cap;
	int size;
	int front;
	int rear;
}queue_t;

void queue_init(queue_t *queue ,int cap)
{
	queue->arr = (int *)malloc(cap * sizeof(queue->arr[0]));
	queue->cap = cap;
	queue->size = 0;
	queue->front = 0;
	queue->rear = 0;
}

void queue_deinit(queue_t *queue)
{
	free(queue->arr);
	queue->arr = NULL;
	queue->cap = 0;
	queue->size = 0;
	queue->front = 0;
	queue->rear = 0;
}

int queue_full(queue_t *queue)
{
	return queue->size >= queue->cap;
}

int queue_empty(queue_t *queue)
{
	return !queue->size;
}

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;
}

int main(int argc ,char *argv[])
{
	queue_t queue;
	queue_init(&queue ,4);
	
	printf("%s " ,queue_full(&queue) ? "满":"不满");
	printf("%s\n" ,queue_empty(&queue) ? "空":"不空");
	
	for(int i = 10 ;i <= 40 ;i+=10){
		if(!queue_full(&queue))
			queue_push(&queue ,i);
	}
	
	printf("%s\n" ,queue_full(&queue) ? "满":"不满");
	printf("队列元素个数为%d\n" ,queue_size(&queue));
	
	printf("出队:");
		
	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);
	}
	
	printf("队列元素个数为%d\n" ,queue_size(&queue));
	
	printf("整体出队:");	
	for(int i = 0 ;i < 4 ;i++){
		if(!queue_empty(&queue)){
			printf("%d " ,queue_pop(&queue));
		}
	}
	printf("\n");
	printf("队列元素个数为%d\n" ,queue_size(&queue));
	
	queue_deinit(&queue);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

暗里い着迷

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

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

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

打赏作者

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

抵扣说明:

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

余额充值