队列的顺序存储实现
//队列的顺序存储实现
#define MaxSize<储存数据元素的最大个数>
struct QNode{
ElementType Data[MaxSize];//一维数组
int rear;//记录队列尾元素位置的变量
int front;//记录队列头元素位置的变量
};
typedef struct QNode *Queue;
//循环队列:front=rear为什么无法判别队列是空还是满?
//front与rear差距有6种情况0~5 n种
//队列装载元素个数情况有7种0~6 n+1种
//用n种状态来区分n+1种情况
//解决方案:
//(1)使用额外标记:Size或者tag域,Size记录元素个数,加入元素时Size+1,删除时Size-1
//标记元素tag 0~1,插入元素时tag置1,删除元素时tag置0,查看tag值可知最后一次操作
//(2)仅使用n-1个数组空间
//1.入队列
void AddQ(Queue PtrQ,ElementType item)
{
if((PtrQ->rear+1)%MaxSize==PtrQ->front){
printf("队列满");//循环队列,5的下一位为0,使用求余函数
return;
}
PtrQ->rear=(PtrQ->rear+1)%MaxSize;
PtrQ->Data[PtrQ->rear]=item;//将item放入
}
//2.出队列
ElementType DeleteQ(Queue PtrQ)
{
if(PtrQ->fron