队列的顺序存储实现

循环队列的结构体定义

typedef int Status; 
typedef int QElemType; /* QElemType类型根据实际情况而定,这里假设为int */
/* 循环队列的顺序存储结构 */
typedef struct QNode
{
	QElemType data[MAXSIZE];
	int front;    	/* 头指针 */
	int rear;		/* 尾指针,若队列不空,指向队列尾元素的下一个位置 */
}SqQueue;

 

(2)生成空队列

/* 初始化一个空队列Q */
Status CreateQueue(SqQueue *Q)
{
    SqQueue *Q = (SqQueue)malloc(sizeof(struct QNode));
    Q->data = (ElementType*)malloc(MaxSize * sizeof(ElementType));
	Q->front = Q->rear = 0;
	return  OK;
}

队空的条件是:rear=front

bool IsEmpty(SqQueue *Q)
{
    return(Q->front == Q->rear);
}

队满的条件是:(rear+1)%数组的长度等于 front

bool IsFull(SqQueue *Q)
{
    return((Q->rear+1)% MaxSize == Q->front);
}

(5)入队

/* 若队列未满,则插入元素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;
}

(6)出队

/* 若队列不空,则删除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;
}
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《队列的顺序存储实现》
文章链接:https://zhuji.vsping.com/4494.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。