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

一定要是C语言的,而且是用栈编的,因为是老师布置的作业,脑壳都想大了都没做出来... 一定要是C语言的,而且是用栈编的,因为是老师布置的作业,脑壳都想大了都没做出来 展开
 我来答
never715
推荐于2017-09-25 · TA获得超过942个赞
知道小有建树答主
回答量:1010
采纳率:84%
帮助的人:463万
展开全部

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

#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;
    }
}

匿名用户
2011-10-11
展开全部
It's easy.分再高点吧!另外,把你已有的,能用的代码给我发一下,不至于要我自己写个栈吧?c语言没有stl的话,还要自己找栈的实现代码吧?反正我没有,你要给我发一个,然后把分提高到150,我就帮你写了。
baiduzhidao.vase@gmail.com
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
超级奶爸头子
2011-10-11 · TA获得超过668个赞
知道小有建树答主
回答量:1111
采纳率:0%
帮助的人:612万
展开全部
说说我的思路啊。回文定义应该正着看和反着看都是一个字符串。那么应该分两种去判断,一个是字符的长度为奇数,一个为偶数。先说奇数,先求中间索引值,如果长度为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,既是回文。至于栈你自己用也行。我觉得不用栈也可以。不知道为什么要用栈。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
使节赞将将军4
2011-10-11 · 超过31用户采纳过TA的回答
知道答主
回答量:90
采纳率:0%
帮助的人:75.8万
展开全部
可以选择用数组模拟栈
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式