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

来源:互联网 发布:哪些网络游戏有mac版 编辑:程序博客网 时间:2024/04/29 18:51

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

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

/*函数名match,严格来说它并不是Status型*/Status match(char *a){SqQueue q;                                      //定义循环队列qchar 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;  }
原创粉丝点击