晕了,这是不是又有错呀~~~
这又是那本书上的题目,大家看看
回文是指正读反读均相同的字符序列,如"abba"和"abdba"均是回文,但"good"不是回文。试写一个算法判定给定的字符向量是否为回文。(提示:将一半字符入栈)
它给出的算法是这样的:
根据提示,算法可设计为:
//以下为顺序栈的存储结构定义
#define StackSize 100 //假定预分配的栈空间最多为100个元素
typedef char DataType;//假定栈元素的数据类型为字符
typedef struct{
DataType data[StackSize];
int top;
}SeqStack;
int IsHuiwen( char *t)
{//判断t字符向量是否为回文,若是,返回1,否则返回0
SeqStack s;
int i , len;
char temp;
InitStack( &s);
len=strlen(t); //求向量长度
for ( i=0; i<len/2; i++)//将一半字符入栈
Push( &s, t[i]);
while( !EmptyStack( &s))
{// 每弹出一个字符与相应字符比较
temp=Pop (&s);
if( temp!=S[i]) return 0 ;// 不等则返回0
else i++;
}
return 1 ; // 比较完毕均相等则返回 1
}
我看后感觉while(!EmptyStack(&s))的循环体有错误`~~它的第一个S[i]是
S[len/2+1],那么如果是godog这个字符串的话,S[len/2+1]应该是d吧.把d和o比较能相等吗??
我自己写了一个,大家给看看:
int isHuiWen(char *t)
{
LinkStack *S;
int i,len;
char temp;
len=strlen(t);
InitStack(&s);
for(i=0;i<len/2;i++)
push(&S,t[i]);
if(len%2==0)
{
while(!EmptyStack(&s))
{
temp=Pop(&s);
if(temp!=t[i]);
return 0;
i++;
}
return1;
}
else{
while(!EmptyStack(&s))
{
temp=Pop(&s);
if(temp!=t[i+1])
return 0;
i++;
}
return 1;
}
}