C语言数据结构,用栈编一个程序,判断一个字符串是否为回文

一定要是C语言的,而且是用栈编的,因为是老师布置的作业,脑壳都想大了都没做出来

用数组模拟栈,然后分情况讨论! 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int IsPalindrome(const char *cScr);

void main(void)
{
    char cStr[21];
    while (1)
    {
        gets(cStr);
        printf("%d\n", IsPalindrome(cStr));
    }
}

int IsPalindrome(const char *cScr)
{
    int iLen = strlen(cScr);
    //预留数组首元素,栈顶从第二元素开始
    int top = 1;
    char *cMyStack = (char *)malloc((iLen / 2 + 1) * sizeof(char));
    //定位对原始数组的检测索引初始位置
    cMyStack[0] = iLen / 2;
    if (1 == iLen % 2)
    {
        ++cMyStack[0];
    }
    //将原始数组的一半元素入栈
    for (top = 1; top <= iLen / 2; top++)
    {
        cMyStack[top] = *(cScr + top - 1);
    }
    //从栈顶开始依次匹配
    while (*(cScr + cMyStack[0]) == cMyStack[--top] && cMyStack[0]++ < iLen) {}
    if (0 == top)
    {//是回文数
        free(cMyStack);
        return 1;
    }
    else
    {//不是回文数
        free(cMyStack);
        return 0;
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-10-11
It's easy.分再高点吧!另外,把你已有的,能用的代码给我发一下,不至于要我自己写个栈吧?c语言没有stl的话,还要自己找栈的实现代码吧?反正我没有,你要给我发一个,然后把分提高到150,我就帮你写了。
[email protected]
第2个回答  2011-10-11
说说我的思路啊。回文定义应该正着看和反着看都是一个字符串。那么应该分两种去判断,一个是字符的长度为奇数,一个为偶数。先说奇数,先求中间索引值,如果长度为s,索引为i,那么中间字符的索引为 i=(s-1)/2 ,那么满足 str[i-n] == str[i+n] n 的值从i循环到0.如果都满足就是是回文。
如果长度为偶数,也要先求出一个参照索引ii,可以是ii = s/2, 要满足str[ii+n] == str[ii-n-1],n一直从ii-1循环到0,既是回文。至于栈你自己用也行。我觉得不用栈也可以。不知道为什么要用栈。
第3个回答  2011-10-11
可以选择用数组模拟栈
相似回答