用队列实现形如a+b@b+a#的中心对称字符的检验

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39984761/article/details/78404522

用队列实现形如a+b@b+a#的中心对称字符的检验

我用网上提供的一种思想,用循环队列实现了这个操作,具体代码如下。

/*函数名match,严格来说它并不是Status型*/
Status match(char *a){

SqQueue q;                                      //定义循环队列q
char b,c;
char*p=a;
InitQueue(q);                                   //初始化队列q                                
while(*p!='@'){                                 //不断进行入队操作,遇到@停止
    EnQueue(q,*p);
    p++;
}
p++;
while(*p!='#'){
    EnQueue(q,*p);
        p++;
}
while (QueueLength(q) != 0) {                   
    if (!DeQueuefront(q, b))return OVERFLOW;
    if (!DeQueuerear(q, c))return OVERFLOW;
    //如果队长不为0,分别取队头元素与队尾元素进行比较
    if (b != c) {
        return FALSE;
    }                                            //若不等返回FALSE,相等则返回OK
} if (q.rear == q.front) {
        return OK;
    }
}

下面把循环队列的基本操作中本程序用到的函数再贴一遍

Status InitQueue (SqQueue &Q){                      //初始化循环队列
    Q.base=(QElemType * )malloc(MAXQSIZE*sizeof(QElemType));
    if(!Q.base)exit(OVERFLOW);
    Q.front=Q.rear=0;
    return OK;
}

int QueueLength(SqQueue Q){                         //返回队长函数
    return(Q.rear-Q.front+MAXQSIZE) % MAXQSIZE;
}


Status EnQueue(SqQueue &Q,QElemType e){             //入队函数
    if((Q.rear+1)%MAXQSIZE == Q.front)return ERROR;
    Q.base[Q.rear]=e;
    Q.rear =(Q.rear+1)%MAXQSIZE;
    return OK;
}

Status DeQueuefront(SqQueue &Q,QElemType &e){       //返回队头值函数
    if(Q.front ==Q.rear) return ERROR;
    e=Q.base[Q.front];
    Q.front=(Q.front+1)%MAXQSIZE;
    return OK;  
}

Status DeQueuerear(SqQueue &Q,QElemType &e){        //返回队尾值函数
    if(Q.front ==Q.rear) return ERROR;
    Q.rear = (Q.rear - 1) % MAXQSIZE;
    e=Q.base[Q.rear];
    return OK;  
}

猜你喜欢

转载自blog.csdn.net/qq_39984761/article/details/78404522