关于数据结构教程P67例3.4的算法的一点优化

例题要求是判断字符串是否对称。教材《数据结构教材 李春葆第四版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

即是说,如果字符串位数是偶数,只要把后面的一半倒过来后和前面的一半比较即可。(如果是对称的,后面的一半必等于前面的)

如果是级数,则是中位数后面的字符倒过来后和中位数前面的比较。

这样就省下了一半的时间,虽说在这种小程序中作用不明显,但是不断优化算法是我们程序员的自我修养哈哈哈哈。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值