链栈判断回文字符,代码运行不了

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 100
typedef struct node
{
char data;
struct node *next;
}*linkstack,pnode;
//初始化链栈
int init(linkstack *l)
{
(*l)=(linkstack)malloc(sizeof(pnode));
if((*l)==NULL)
return 0;
(*l)->next=NULL;
return 1;
}
//入栈
int push(linkstack *l,char ch)
{
linkstack s;
s=(linkstack)malloc(sizeof(pnode));
if((*l)->next==NULL||s==NULL)
return 0;
s->data=ch;
s->next=(*l);
(*l)=s;
return 1;
}
//出栈
int pop(linkstack *l,char x)
{
linkstack s;
if((*l)->next==NULL)
return -1;
x=(*l)->data;
s=(*l);
(*l)=(*l)->next;
free(s);
return 1;
}
//转移字符
void move(linkstack *l,linkstack *s,int n)
{
int count=0;
char ch;
while(count<n/2+1)
{
ch=(*l)->data;
push(s,ch);
pop(l,ch);
(*l)=(*l)->next;
count++;
}
printf("\n");
}
//判断是否为回文字符
void judge(linkstack *l,linkstack *s,int n)
{
int flag=1;
if(n%2)
(*l)=(*l)->next;
while((*l)&&(*s))
{
if((*l)->data!=(*s)->data)
{
flag=0;
}
(*s)=(*l)->next;
(*s)=(*s)->next;
}
if(flag)
printf("该字符为回文字符\n");
else
printf("该字符不为回文字符\n");
}
int main()
{
linkstack l,s;
char a[maxsize];
int n,i=0;
init(&l),init(&s);
printf("需要判断的字符串:\n");
scanf("%s",a);
for(i=0;i<n;i++)
{
push(&l,a[i]);
}
n=strlen(a);
printf("该字符串长度为:%d",n);
move(&l,&s,n);
judge(&l,&s,n);
return 0;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 100
typedef struct node
{
char data;
struct node *next;
}*linkstack,pnode;
//初始化链栈
int init(linkstack *l)
{
(*l)=(linkstack)malloc(sizeof(pnode));
if((*l)==NULL)
return 0;
(*l)->next=NULL;
return 1;
}
//入栈
int push(linkstack *l,char ch)
{
linkstack s;
s=(linkstack)malloc(sizeof(pnode));
if((*l)->next==NULL||s==NULL)
return 0;
s->data=ch;
s->next=(*l);
(*l)=s;
return 1;
}
//出栈
int pop(linkstack *l,char x)
{
linkstack s;
if((*l)->next==NULL)
return -1;
x=(*l)->data;
s=(*l);
(*l)=(*l)->next;
free(s);
return 1;
}
//转移字符
void move(linkstack *l,linkstack *s,int n)
{
int count=0;
char ch;
while(count<n/2+1)
{
ch=(*l)->data;
push(s,ch);
pop(l,ch);
(*l)=(*l)->next;
count++;
}
printf("\n");
}
//判断是否为回文字符
void judge(linkstack *l,linkstack *s,int n)
{
int flag=1;
if(n%2)
(*l)=(*l)->next;
while((*l)&&(*s))
{
if((*l)->data!=(*s)->data)
{
flag=0;
}
(*s)=(*l)->next;
(*s)=(*s)->next;
}
if(flag)
printf("该字符为回文字符\n");
else
printf("该字符不为回文字符\n");
}
int main()
{
linkstack l,s;
char a[maxsize];
int n,i=0;
init(&l),init(&s);
printf("需要判断的字符串:\n");
scanf("%s",a);
for(i=0;i<n;i++)
{
push(&l,a[i]);
}
n=strlen(a);
printf("该字符串长度为:%d",n);
move(&l,&s,n);
judge(&l,&s,n);
return 0;
}

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define maxsize 100
typedef struct node
{
char data;
struct node *next;
}*linkstack,pnode;
//初始化链栈
int init(linkstack *l)
{
(*l)=(linkstack)malloc(sizeof(pnode));
if((*l)==NULL)
return 0;
(*l)->next=NULL;
return 1;
}
//入栈
int push(linkstack *l,char ch)
{
linkstack s;
s=(linkstack)malloc(sizeof(pnode));
if((*l)->next==NULL||s==NULL)
return 0;
s->data=ch;
s->next=(*l);
(*l)=s;
return 1;
}
//出栈
int pop(linkstack *l,char x)
{
linkstack s;
if((*l)->next==NULL)
return -1;
x=(*l)->data;
s=(*l);
(*l)=(*l)->next;
free(s);
return 1;
}
//转移字符
void move(linkstack *l,linkstack *s,int n)
{
int count=0;
char ch;
while(count<n/2+1)
{
ch=(*l)->data;
push(s,ch);
pop(l,ch);
(*l)=(*l)->next;
count++;
}
printf("\n");
}
//判断是否为回文字符
void judge(linkstack *l,linkstack *s,int n)
{
int flag=1;
if(n%2)
(*l)=(*l)->next;
while((*l)&&(*s))
{
if((*l)->data!=(*s)->data)
{
flag=0;
}
(*s)=(*l)->next;
(*s)=(*s)->next;
}
if(flag)
printf("该字符为回文字符\n");
else
printf("该字符不为回文字符\n");
}
int main()
{
linkstack l,s;
char a[maxsize];
int n,i=0;
init(&l),init(&s);
printf("需要判断的字符串:\n");
scanf("%s",a);
for(i=0;i<n;i++)
{
push(&l,a[i]);
}
n=strlen(a);
printf("该字符串长度为:%d",n);
move(&l,&s,n);
judge(&l,&s,n);
return 0;
}