数据结构要求用c语言写用堆栈判断一串字符是否回文,我写的代码如下,不知道哪里错了,哪个大神帮我看下 5
#include"stdio.h"#include"malloc.h"#defineMax20typedefstructnote{chardata[Max];inttop...
#include "stdio.h"
#include "malloc.h"
#define Max 20
typedef struct note
{
char data[Max];
int top;
}Seqstack;
typedef struct
{
char data[Max];
int length;
}LinkList;
Seqstack *InitStack(Seqstack *S)
{//初始化栈
S->top=-1;
return S;
}
Seqstack *Push(Seqstack *S, char x)
{//进栈
if(S->top<Max-1&&S->top>=-1)
{
S->top++;
S->data[S->top]=x;
}
else
printf("Error!!!");
return S;
}
Seqstack *Pop(Seqstack *S)
{//出栈
if(S->top>=0)
{
S->top--;
}
else
printf("Error");
return S;
}
LinkList *Sqlset()
{//初始化顺序表,输入表长和各个元素
LinkList *L;
int a;
L=malloc(sizeof(LinkList));
printf("输入表中元素的个数");
scanf("%d",&a);
printf("请输入每个元素的值");
for(L->length=0;L->length<a;L->length++)
{
scanf("%c",&L->data[L->length]);
}
return (L);
}
Huiwen(LinkList *S)
{
Seqstack *L;
int i,flag=1;
L=(Seqstack *)malloc(sizeof(Seqstack));
L->top=-1;
if(S->length%2==0)
{
for(i=0;i<S->length/2;i++)
{
Push(L,S->data[i]);
}
for(i=S->length/2;i<S->length;i++)
{
if(L->top==S->data[i])
{
Pop(L);
}
else
{
flag=0;
break;
}
}
}
else
{
for(i=0;i<(S->length-1)/2;i++)
{
Push(L,S->data[i]);
}
for(i=S->length/2+1;i<S->length;i++)
{
if(L->top==S->data[i])
{
Pop(L);
}
else
{
flag=0;
break;
}
}
}
if(flag)
{
printf("该段字符回文");
}
else
printf("该段字符不回文");
}
main()
{
Seqstack *L;
LinkList *S;
//int n,i;
L=(Seqstack *)malloc(sizeof(Seqstack));
L->top=-1;
S=Sqlset();
Huiwen(S);
} 展开
#include "malloc.h"
#define Max 20
typedef struct note
{
char data[Max];
int top;
}Seqstack;
typedef struct
{
char data[Max];
int length;
}LinkList;
Seqstack *InitStack(Seqstack *S)
{//初始化栈
S->top=-1;
return S;
}
Seqstack *Push(Seqstack *S, char x)
{//进栈
if(S->top<Max-1&&S->top>=-1)
{
S->top++;
S->data[S->top]=x;
}
else
printf("Error!!!");
return S;
}
Seqstack *Pop(Seqstack *S)
{//出栈
if(S->top>=0)
{
S->top--;
}
else
printf("Error");
return S;
}
LinkList *Sqlset()
{//初始化顺序表,输入表长和各个元素
LinkList *L;
int a;
L=malloc(sizeof(LinkList));
printf("输入表中元素的个数");
scanf("%d",&a);
printf("请输入每个元素的值");
for(L->length=0;L->length<a;L->length++)
{
scanf("%c",&L->data[L->length]);
}
return (L);
}
Huiwen(LinkList *S)
{
Seqstack *L;
int i,flag=1;
L=(Seqstack *)malloc(sizeof(Seqstack));
L->top=-1;
if(S->length%2==0)
{
for(i=0;i<S->length/2;i++)
{
Push(L,S->data[i]);
}
for(i=S->length/2;i<S->length;i++)
{
if(L->top==S->data[i])
{
Pop(L);
}
else
{
flag=0;
break;
}
}
}
else
{
for(i=0;i<(S->length-1)/2;i++)
{
Push(L,S->data[i]);
}
for(i=S->length/2+1;i<S->length;i++)
{
if(L->top==S->data[i])
{
Pop(L);
}
else
{
flag=0;
break;
}
}
}
if(flag)
{
printf("该段字符回文");
}
else
printf("该段字符不回文");
}
main()
{
Seqstack *L;
LinkList *S;
//int n,i;
L=(Seqstack *)malloc(sizeof(Seqstack));
L->top=-1;
S=Sqlset();
Huiwen(S);
} 展开
1个回答
展开全部
把Sqlset函数中的L=malloc(sizeof(LinkList));改成L=(LinkList *)malloc(sizeof(LinkList));。
把Huiwen函数中的两条if(L->top==S->data[i])都改成if(L->data[L->top]==S->data[i])应该就可以了。
追问
错的,不是问题的关键,我已经解决好了,应该是少了个getchar();
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询