C 数组实现 循环队列

/*
	数组 实现循环队列
	数组中留1个位置出来不用,MAXSIZE-1个 为满

*/
#include <stdio.h>
#include <malloc.h>

#define OK 1
#define ERROR 0
/*定义循环队列的数组空间大小*/
#define MAXSIZE 6

typedef int Status;
/*定义数据类型 假设为int*/
typedef int Element;

typedef struct{
	Element data[MAXSIZE];
	int front;/*队头*/
	int rear;/*队尾*/
}SqQueue;

/*初始化*/
Status Init(SqQueue *q)
{
	q->front = 0;
	q->rear = 0;
	return OK;
}

/*队列中元素个数*/
int QueueLength(SqQueue *q)
{
	return  (q->rear - q->front + MAXSIZE) % MAXSIZE ;
}

/*队列是否已经满*/
bool FullQueue(SqQueue *q)
{
	if ( (q->rear + 1)% MAXSIZE == q->front )
		return true;
	else
		return false;
}

/*队列是否为空*/
bool EmptyQueue(SqQueue *q)
{
	return q->front == q->rear ;
}
/*入队*/
Status EnterQueue(SqQueue *q, Element data)
{
	if( FullQueue(q))
		return ERROR;
	q->data[q->rear] = data;
	q->rear = (q->rear + 1) % MAXSIZE;
	printf("入队成功\n");
	return OK;
}

/*出队*/
Status DepartQueue(SqQueue *q,Element *e)
{
	if( EmptyQueue(q))
		return ERROR;
	*e = q->data[q->front];
	q->front = (q->front+1)%MAXSIZE;
	printf("出队成功\n");
	return OK;
}

int main(void)
{
	SqQueue q;
	Element data;
	Init(&q);
	EnterQueue(&q,1);
	EnterQueue(&q,2);
	EnterQueue(&q,3);
	EnterQueue(&q,4);
	EnterQueue(&q,5);
	EnterQueue(&q,6);	
	EnterQueue(&q,7);
	
	DepartQueue(&q,&data);
	DepartQueue(&q,&data);
	DepartQueue(&q,&data);
	DepartQueue(&q,&data);
	DepartQueue(&q,&data);
	DepartQueue(&q,&data);
	DepartQueue(&q,&data);
	/*测试结果   5次入队出队 成功 说明实验成功了*/
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值