求数据结构高手给解道题!如下:

设单链表中存放着n个字符,试编写算法,判断该字符串是否有中心对称关系。例如:xyzzyx,xyzyx都算是中心对称的字符串。(提示:将一半字符先依次进栈)用C语言编写!!... 设单链表中存放着n个字符,试编写算法,判断该字符串是否有中心对称关系。例如:xyzzyx,xyzyx都算是中心对称的字符串。(提示:将一半字符先依次进栈)用C语言编写!!
谢谢高手们给予解答!!
展开
 我来答
龌龊狗狗
2008-04-30 · 超过14用户采纳过TA的回答
知道答主
回答量:31
采纳率:0%
帮助的人:0
展开全部
#include <stdio.h>
#include <stdlib.h>
#include <iostream.h>
#define maxsize 100
int i=0;
typedef struct node
{
char data;
struct node *next;
}Linklist;
Linklist *InitStack(char S[])
{
Linklist *head,*H,*p;
while(S[i]!=NULL)
{
p=(Linklist*)malloc(sizeof(Linklist));
p->data=S[i];
p->next=NULL;
if(i==0)
head=H=p;
else
{
H->next=p;
H=p;
}
i++;
}
return head;
}
//
int duichen(Linklist *H)
{
char S[maxsize];
int top=0,j=0;
Linklist *p=H;
while(j<(i/2))
{
p=p->next;j++;}
while (p!=NULL)
{
S[top]=p->data;
top++;
p=p->next;
}
p=H;
while(p!=NULL)
{
top--;
if(p->data==S[top])
p=p->next;
else break;
}
if(top==-1)
return 1;
else
return 0;
}
void main()
{
char S[maxsize],c;
Linklist *H;
while(1)
{
printf("input a string:");
scanf("%s",S);
H=InitStack(S);
if(duichen(H)==1)
printf("\nyes!\n");
else
printf("\nno!\n");
}
}
超圣科技
2024-10-17 广告
数据分类分级是确保数据安全与合规性的重要环节。在北京超圣信华科技有限公司,我们严格遵循行业标准与法律法规,将数据按敏感程度划分为不同等级,如公开级、内部级、机密级等。通过精细化分类,实现对数据访问权限的精准控制,防止数据泄露与滥用。同时,针... 点击进入详情页
本回答由超圣科技提供
jackys2007
2008-04-19 · TA获得超过1913个赞
知道小有建树答主
回答量:828
采纳率:100%
帮助的人:914万
展开全部
这样写如何:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <string.h>

bool f(char *s);

int main()
{

char s[]="abcdcba";

printf("%d",f(s));

system("pause");

return 0;
}

bool f(char *s)
{
int len;
int i;
int flag=1;
len=strlen(s);

for(i=0;i<len/2;i++)
{
if(*(s+i)!=*(s+len-i-1))
{
flag=0;
break;
}
}

return flag;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友5bf730e7e
2008-04-19 · TA获得超过715个赞
知道小有建树答主
回答量:191
采纳率:0%
帮助的人:0
展开全部
两个指针就行了呀
初始i指头,j指尾
比较i、j所指是否相同
若不同则跳出 否则i:=i-1 j:=j-1
这样一直比下去,直到i>j时跳出就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
图丁丁
2008-04-19 · 超过32用户采纳过TA的回答
知道答主
回答量:79
采纳率:0%
帮助的人:0
展开全部
# include <stdio.h>
# define N 6
/*N为字符个数,可改变*/
/*输入字符时连续输入既可,不用加空格,如:asddsa*/
typedef char DataType;
typedef struct node
{
DataType data;
struct node *next;
}SLNode;

void SLNode_Initiate(SLNode **head)
{
if((*head=(SLNode *)malloc(sizeof(SLNode)))==NULL)
exit(1);
(*head)->next=NULL;
}
int SLNode_Insert(SLNode *head,int pos,DataType add)
{
SLNode *p,*s;
int i;
p=head;
for(i=0;i<pos;i++)
p=p->next;
if((s=(SLNode *)malloc(sizeof(SLNode)))==NULL)
return 0;
s->data=add;
s->next=p->next;
p->next=s;
return 1;
}
int SLNode_Get(SLNode *head,int pos)
{
SLNode *p=head;
int i;
for(i=0;i<=pos;i++)
p=p->next;
return p->data;
}
main()
{
int i,j;
char ch;
SLNode *L;
SLNode_Initiate(&L);
printf("please input the words:");
for(i=0;i<N;i++)
{
ch=getchar();
SLNode_Insert(L,i,ch);
}
for(i=0,j=N-1;i<=j;i++,j--)
if(SLNode_Get(L,i)==SLNode_Get(L,j)) ;
else break;
if(i>=N/2)
printf("Yes!\n");
else printf("No!\n");
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
csharp_java
2008-04-19
知道答主
回答量:14
采纳率:0%
帮助的人:0
展开全部
先对N进行奇偶判断,

然后对N/2个字符依次进栈,

奇数个的话,直接将第N/2+1个字符舍弃(偶数无此判断)

然后对后面的字符与当前出栈的字符比较,
相等则继续比较后面,不相等则直接返回false

若全部比较完则返回true
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式