您的位置:首页 > 理论基础 > 数据结构算法

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

2016-09-29 15:05 281 查看
例题要求是判断字符串是否对称。教材《数据结构教材 李春葆第四版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

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

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

这样就省下了一半的时间,虽说在这种小程序中作用不明显,但是不断优化算法是我们程序员的自我修养哈哈哈哈。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 数据结构 算法