请问这段代码有什么问题呢?

#include"c1.h"
typedef char SElemType;
#include"c3-1.h"
#include"bo3-1.c"

typedef char QElemType;
#include"c3-2.h"
#include"bo3-2.c"

#define N 100
#define error 0
#define ok 1

int Huiwen(char p[N])
{

 LinkQueue *Q;
 SqStack *S;
 InitQueue(Q);
 InitStack(S);
 SElemType *e1;
 QElemType *e2;

 int i=0;
 while(p[i])
 {
     Push(S,p[i]);
     EnQueue(Q,p[i++]);

 }

while(!StackEmpty(*S)&&!QueueEmpty(*Q))
{

    Pop(S,e1);
    DeQueue(Q,e2);
    if(e1!=e2)
    return error;
    break;
}

DestroyStack(S);
DestroyQueue(Q);


return ok;

}
int main()
{
char s[N];

printf("请输入序列: \n");
gets(s);
if(Huiwen(s))
printf("该序列为回文序列");
else
printf("该序列不为回文序列");
return 0;
}

代码功能归根结底不是别人帮自己看或讲解或注释出来的;而是被自己静下心来花足够长的时间和精力亲自动手单步或设断点或对执行到某步获得的中间结果显示或写到日志文件中一步一步分析出来的。
提醒:再牛×的老师也无法代替学生自己领悟和上厕所!
单步调试和设断点调试(VS IDE中编译连接通过以后,按F10或F11键单步执行,按Shift+F11退出当前函数;在某行按F9设断点后按F5执行停在该断点处。)是程序员必须掌握的技能之一。