用c实现循环队列

//构造循环队列
#include "stdio.h"
#include "malloc.h"
typedef struct queue
{
	int * pbase;//用来指向数组
	int front;//队列的头指针
	int rear;//队列的尾指针
}QUEUE;
void init(QUEUE *);//初始化队列
bool en_queue(QUEUE *,int i);//入队
bool is_full(QUEUE *);
void traverse(QUEUE *);//遍历队
bool is_empty(QUEUE *p);
void out_queue(QUEUE *p,int *pval);//出队
int main()
{
	int i;//存放岀队的元素
	QUEUE q;//声明一个队列
	init(&q);
	en_queue(&q,1);
	en_queue(&q,2);
	en_queue(&q,3);
	en_queue(&q,4);
	traverse(&q);
	out_queue(&q,&i);
	printf("出队元素为:%d\n",i);
	traverse(&q);
	return 0;
}
void init(QUEUE *p)
{
	printf("初始化一个长度为6的队列\n");
	p->pbase=(int *)malloc(sizeof(int)*6);
	p->front=0;
	p->rear=0;
}
bool en_queue(QUEUE *p,int i)
{
	if(is_full(p))
		return 0;
	else
	{
		printf("入队成功!\n");
		//队列非空的情况下front指向头元素,rear指向最后一个有效元素的下一个元素
		p->pbase[p->rear]=i;
		p->rear=(p->rear+1)%6;
		return 1;
	}
}
bool is_full(QUEUE *p)
{
	//若rear+1=front则队列满,n个空间的队列只使用n-1个
	if((p->rear+1)%6==p->front)
	{
		printf("数组以满!\n");
		return 1;
	}
	else 
		return 0;
}
void traverse(QUEUE *p)
{
	int i=p->front;
	printf("队内的元素为:\n");
	while(i!=p->rear)
	{
		printf("%d\t",p->pbase[i]);
		i=(i+1)%6;
	}
}
void out_queue(QUEUE *p,int *pval)
{
	
		if(is_empty(p))
		{
			printf("队列空,无法出队!\n");
		}
		else
		{
			*pval=p->pbase[p->front];
			p->front=(p->front+1)%6;//岀队的方式
		}
}
bool is_empty(QUEUE *p)
{
	if(p->front==p->rear)//若front和rear相等,则队列为空
	{
		return 1;
	}
	else 
		return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值