例题要求是判断字符串是否对称。教材《数据结构教材 李春葆第四版P67》
以下是优化后的代码:(数据结构是栈,然后Push是进栈,Pop是出栈,InitStack是初始化,Deastroy是销毁)
bool Symmetry()
{ElemType a[20];
ElemType t;
int char_length,i;
sqStack *s;
InitStack(s);
printf("请输入字符串");
scanf("%s",a);
for(i=0;a[i]!='\0';i++)
{
Push(s,a[i]);
}
for(i=0;i<=(s->top+1)/2;i++) //课本上的是结束条件是 s->data[s->top]!='\0'
{
Pop(s,t);
if(a[i]!=t)
{ printf("字符串是不对称的");
DestroyStack(s);
return false;
}
}
printf("字符串是对称的");
DestroyStack(s);
return true;
}
/课本上的是结束条件是 s->data[s->top]!='\0'
这就相当于把整个字符串倒过来和原来的字符串进行比较,而我的改动是i<=(s->top+1)/2
即是说,如果字符串位数是偶数,只要把后面的一半倒过来后和前面的一半比较即可。(如果是对称的,后面的一半必等于前面的)
如果是级数,则是中位数后面的字符倒过来后和中位数前面的比较。
这样就省下了一半的时间,虽说在这种小程序中作用不明显,但是不断优化算法是我们程序员的自我修养哈哈哈哈。。。