循环队列

1 定义:队列的头尾相接的顺序存储结构称为循环列队
2 如何判断队列满?
假设:front和rear只相差一个空格时就是满的情况。
队列最大尺寸为:QueueSize,
队列满的条件:(rear+1)%QueueSize==front
通用队列计算公式:(rear-front+QueueSIize)%QueueSize
循环队列的顺序存储结构

typedef  int QElemType
/*循环队列的顺序存储结构*/
typedef struct
{
	QElemType data[MAXSIZE];
	int front;
	int rear;
}

循环队列的初始化代码

/*初始化一个空队列*/
statue InitQueue(SqQueue  *Q)
{
Q->front=0;
Q->rear=0;
return OK;
}

循环队列求队列长度代码

/*返回	Q的元素个数,也就是队列的当前长度* /
int QueueLength(SqQueue Q)
{
	return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}

循环队列的入队操作代码

/*若队列未满,则插入元素e为Q新的队尾元素*/
Status EnQueue(SqQueue *Q,QElemtype e)
{
	if((Q->rear+1)%MAXSIZE==Q->front)   /*队列满的判断*/
		return ERROR;
	Q->data[Q->rear]=e;     /*将元素e赋给队尾*/
	Q->rear=(Q->rear+1)%MAXSIZE;/*rear指针向后移一个位置*/
														/*若到最后则转到数组头部*/
	return OK;
}

循环队列的出队列操作代码

/*若队列不空,则删除Q中队头元素,用e返回其值*/
Status DeQueue(SqQueue *Q,QELEMType *e) 
{
	if (Q->front==Q->rear)     /*队列空的判断*/
		return ERROR;
	*e=Q->data[Q->front];          /*将队头元素赋值给e*/
	Q->front=(Q->front+1)%MAXSIZE;/*front 指针向后移一位*/
															/*若到最后则转到数组头部*/

	return OK;
	}
上一篇:高校学生参加飞天加速计划


下一篇:飞天加速计划·高校学生在家实践