user-0 提问: 数据结构--关于用队列实现形如a+b@b+a#字符序列的检验，程序进行要要检验一步就不运行了，求帮忙看看代码哪里有问题！！

回复:
user: user-0
content: 引用 1 楼 自信男孩的回复:#include <stdio.h> #include <stdlib.h>  #define MAXQSIZE 100 #define ERROR 0 #define OK 1  typedef struct{     char *base;     int front;     int rear; }SqQueue;  void InitQueue(SqQueue *Q) //建立顺序队列 {     Q->base=(char*)malloc(MAXQSIZE*sizeof(char));     if(!Q->base)         exit(1);     Q->front = Q->rear = 0; }  int EnQueue(SqQueue *Q,char e) {     if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; //队列满条件     Q->base[Q->rear]=e;     Q->rear=(Q->rear+1)%MAXQSIZE;     return OK; }  int DeQueue(SqQueue *Q,char *e)  //从队列头删除一个元素 {     if(Q->front==Q->rear)         return ERROR; //队列空条件     *e=Q->base[Q->front];     Q->front=(Q->front+1)%MAXQSIZE;     return OK; }  int DeQueue_rear(SqQueue *Q,char *e) //从队列尾删除一个元素 {     if(Q->front == Q->rear)         return ERROR; //队列空     //*e=Q->base[Q->rear];     *e=Q->base[Q->rear-1];     Q->rear=(Q->rear-1)%MAXQSIZE;      return OK; }  int GetHead(SqQueue Q,char *e) {     if(Q.front==Q.rear)         return ERROR; //队列空     *e=Q.base[Q.front];     return OK; }  int QueueLength(SqQueue *Q) {     return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE; }  int CheckSymmetry(SqQueue *Q,char ch[]) {     InitQueue(Q);     int i=0;     //char *e,*c;     char e, c;     while(ch[i]!='@')  //@前字符入队列     {         EnQueue(Q,ch[i]);         i++;     }     i++;     while(ch[i]!='#')  //@后#前字符入队列     {         EnQueue(Q,ch[i]);         i++;     }     while(QueueLength(Q)!=0)     {         if(!DeQueue(Q, &c))             return ERROR;//取队头元素         if(!DeQueue_rear(Q, &e))             return ERROR;//取队尾元素         printf("%c:%c\n", c, e);         if(c != e)             return 0;     }     if(Q->front==Q->rear)         return 1; //队列为空，成功对称      return 0; }  int main(void) {     SqQueue Q;     //Q=(SqQueue*)malloc(sizeof(*Q));     //if(!Q) exit(1);     int i=0;     char ch[100]={'0'}, c;     do{         printf("请输入一个字符(形如a+b@b+a#的序列)：\n");         scanf("%c",&c);         getchar();         ch[i]=c;         i++;     }while(c != '#');     if(CheckSymmetry(&Q,ch))         printf("是中心对称序列\n");     else         printf("不是中心对称序列\n"); } 供参考～ 非常感谢！！但是有个疑问，在检验匹配的函数里，char *e,*c,为什么不可以呢，传指针进入DeQueue 函数，然后把指针的值赋为要弹出的队列值，这样为什么不可以呢？？希望可以解释一下非常感谢！！

user: user-1
content: #include <stdio.h> #include <stdlib.h>  #define MAXQSIZE 100 #define ERROR 0 #define OK 1  typedef struct{     char *base;     int front;     int rear; }SqQueue;  void InitQueue(SqQueue *Q) //建立顺序队列 {     Q->base=(char*)malloc(MAXQSIZE*sizeof(char));     if(!Q->base)         exit(1);     Q->front = Q->rear = 0; }  int EnQueue(SqQueue *Q,char e) {     if((Q->rear+1)%MAXQSIZE==Q->front) return ERROR; //队列满条件     Q->base[Q->rear]=e;     Q->rear=(Q->rear+1)%MAXQSIZE;     return OK; }  int DeQueue(SqQueue *Q,char *e)  //从队列头删除一个元素 {     if(Q->front==Q->rear)         return ERROR; //队列空条件     *e=Q->base[Q->front];     Q->front=(Q->front+1)%MAXQSIZE;     return OK; }  int DeQueue_rear(SqQueue *Q,char *e) //从队列尾删除一个元素 {     if(Q->front == Q->rear)         return ERROR; //队列空     //*e=Q->base[Q->rear];     *e=Q->base[Q->rear-1];     Q->rear=(Q->rear-1)%MAXQSIZE;      return OK; }  int GetHead(SqQueue Q,char *e) {     if(Q.front==Q.rear)         return ERROR; //队列空     *e=Q.base[Q.front];     return OK; }  int QueueLength(SqQueue *Q) {     return (Q->rear-Q->front+MAXQSIZE)%MAXQSIZE; }  int CheckSymmetry(SqQueue *Q,char ch[]) {     InitQueue(Q);     int i=0;     //char *e,*c;     char e, c;     while(ch[i]!='@')  //@前字符入队列     {         EnQueue(Q,ch[i]);         i++;     }     i++;     while(ch[i]!='#')  //@后#前字符入队列     {         EnQueue(Q,ch[i]);         i++;     }     while(QueueLength(Q)!=0)     {         if(!DeQueue(Q, &c))             return ERROR;//取队头元素         if(!DeQueue_rear(Q, &e))             return ERROR;//取队尾元素         printf("%c:%c\n", c, e);         if(c != e)             return 0;     }     if(Q->front==Q->rear)         return 1; //队列为空，成功对称      return 0; }  int main(void) {     SqQueue Q;     //Q=(SqQueue*)malloc(sizeof(*Q));     //if(!Q) exit(1);     int i=0;     char ch[100]={'0'}, c;     do{         printf("请输入一个字符(形如a+b@b+a#的序列)：\n");         scanf("%c",&c);         getchar();         ch[i]=c;         i++;     }while(c != '#');     if(CheckSymmetry(&Q,ch))         printf("是中心对称序列\n");     else         printf("不是中心对称序列\n"); } 供参考～