/*----------------------------------------------------------------------
* 操作目的 :判断一个字符序列是否为回文
* 初始条件 :字符序列存在
* 操作结果 :若字符序列为回文,返回true,否则返回false
* 函数参数 :
char *str 待判断的字符序列
*返回值 : bool型
*基本实现思想:构造一个栈和一个队列,让字符序列
做入栈和入队列操作,遇到‘@’停止,
然后依次出栈和出队,依次比较,如果
出栈完成,所有字符相等,说明是回文
否则不是回文
-------------------------------------------------------------------*/
bool judgePlalinDrome(const char *str)
{
if(str[0] != '@')
{
int i = 0;
ElemType S = 0;
ElemType Q = 0;
SqStack sStr;
LinkQueue qStr;
InitStack(&sStr);
InitQueue(&qStr);
while(str[i] != '@')
{
Push(&sStr,str[i]); //入栈
EnQueue(&qStr,str[i]); //入队列
i++;
}
while(sStr.top != sStr.base)
{
Pop(&sStr,&S); //出栈
DeQueue(&qStr,&Q); //出队
if(S != Q)
{
break; //如果发现Q != S 停止出栈,否则都出栈
}
}
if(sStr.top == sStr.base)
{
return true;
}
else
{
return false;
}
}
}