C语言实现顺序队列(环形)
一、头文件、自定义数据类型及自定义变量
#include<stdio.h>
#include<stdlib.h>
typedef int QElemType;
typedef int Status;
#define OK 1
#define ERROR 0
#define MAXQSIZE 100 //队列所能达到的最大长度
二、顺序队列的存储结构
typedef struct{
QElemType data[MAXQSIZE];
int front; //头指针(数组下标)
int rear; //尾指针(数组下标)
}SqQueue;
三、创建队列(初始化)
Status InitQueue(SqQueue &Q){
Q.front=Q.rear=0;
printf("空队列已经创建\n");
return OK;
}
四、求队列长度
int QueueLength(SqQueue Q){
return (Q.rear+MAXQSIZE-Q.front)%MAXQSIZE;
}
解析:
队列中有效数据个数:(rear+MAXQSIZE-front)%MAXQSIZE
因为是环形队列,有以下两种情况:
1、front位于rear之前
有效数据个数:rear-front
与(rear+MAXQSIZE-front)%MAXQSIZE等价
2、front位于rear之后
有效数据个数:rear+MAXQSIZE-front
因为rear-front<0
(rear-front)%MAXQSIZE=rear-fro