題目描述:
循環隊列設定tag标志域判斷隊滿隊空
算法思想:
tag等于0的情況下,若因删除導緻Q.Rear==Q.Front則為隊空
tag等于1的情況下,若因插入導緻Q.Rear==Q.Front則為隊滿
核心代碼:
//tag等于0的情況下,若因删除導緻Q.Rear==Q.Front則為隊空
//tag等于1的情況下,若因插入導緻Q.Rear==Q.Front則為隊滿
bool EnQueue(Queue &Q,int x)//,int tag)
{
//if((Q.Rear%MaxSize==Q.Front)&&tag==1)
//這裡不需要再%MaxSize
if((Q.Rear==Q.Front)&&tag==1)
return false;
Q.data[Rear]=x;
Q.Rear=(Q.Rear+1)%MaxSize;
Q.tag=1;//可能隊滿
//這裡其實挺有意思的,隻有當同時滿足Q.Rear==Q.Front)&&tag==1的時候才會return false
//隻要你入隊了,你就有可能隊滿
// if(Q.Rear==Q.Front)
// tag=1;
return true;
}
bool DeQueue(Queue &Q,int &x)//,int tag)
{
if(Q.Rear==Q.Front&&tag==0)
return false;
x=Q.data[Front];
Front=(Front+1)%MaxSize;
Q.tag=0;//可能隊空
//隻要你出隊了,你就有可能隊空
return true;
}