C语言数据结构,用栈编一个程序,判断一个字符串是否为回文
4个回答
展开全部
用数组模拟栈,然后分情况讨论!
#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
baiduzhidao.vase@gmail.com
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
说说我的思路啊。回文定义应该正着看和反着看都是一个字符串。那么应该分两种去判断,一个是字符的长度为奇数,一个为偶数。先说奇数,先求中间索引值,如果长度为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,既是回文。至于栈你自己用也行。我觉得不用栈也可以。不知道为什么要用栈。
如果长度为偶数,也要先求出一个参照索引ii,可以是ii = s/2, 要满足str[ii+n] == str[ii-n-1],n一直从ii-1循环到0,既是回文。至于栈你自己用也行。我觉得不用栈也可以。不知道为什么要用栈。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
可以选择用数组模拟栈
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询