天天看點

王道課後習題3.2.1:循環隊列設定tag标志域判斷隊滿隊空

題目描述:

循環隊列設定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;
}
           

繼續閱讀