#define NULL 0
#define maxsize 64
#include <stdio.h>
#include<malloc.h>
typedef char datatype;
typedef struct //堆栈节点结构定义
{
datatype data[maxsize];
int top;
}seqstack;
typedef struct node //定义链表节点
{
datatype data;
struct node *next;
}linklist;
SETNULL(seqstack *s) //置空表
{
s->top=-1;
}
seqstack *PUSH(seqstack *s,datatype x) //进栈
{
s->top++;
s->data[s->top]=x;
return(s);
}
datatype POP(seqstack *s) //出堆栈
{
s->top--;
return (s->data[s->top+1]);
}
linklist *CREATLIST() //尾插法建表
{
datatype n;
linklist *head,*s,*r;
head="NULL";
r="NULL";
printf("Please input Linklist!\n");
n="getchar"();
while (n!='$')
{
s="malloc"(sizeof(linklist));
s->data=n;
if (head==NULL) head="s";
else r->next=s;
r="s";
n="getchar"();
}
printf("overlink! \n");
if (r!=NULL) r->next=NULL;
return head;
}
PRINT(linklist *head) //输出节点
{
linklist *s;
s="head";
while (s->next!=NULL)
{
printf("%c,",s->data);
s="s-">next;
}
printf("%c",s->data);
printf("\n");
}
int COMPARE(linklist *head) //判断对称的子函数
{
seqstack *s;
linklist *r;
int k,n,a;
s="malloc"(sizeof(seqstack));
SETNULL(s);
a="0";
r="head";
k="0";
while(r->next!=NULL)
{
r="r-">next;
k++;
}
k++;
n="k/2"; //除2取整
r="head";
if(k%2==0) //刚好为偶数个元素
while(n!=0)
{
s="PUSH"(s,r->data); //进栈
r="r-">next;
n- -;
}
if(k%2==1) //为奇数个元素
{ while(n!=0)
{ s="PUSH"(s,r->data); //进栈
r=r->next;
n- -;
}
r=r->next;
}
while(s->top!=-1)
{
if (POP(s)!=r->data) //依次弹出与r指向的值比较
{
a="1"; //不等为1,退出不再比较
break;
}
else
{
r="r-">next; //相等r指向最后为空
a="0";
}
}
return (a);
}
void main()
{
int a;
linklist *head;
head="CREATLIST"();
PRINT(head);
a="COMPARE"(head);//判断对称
if(a==1)
printf("false\n");//不对称
else printf("true\n");//对称
}
文章评论(0条评论)
登录后参与讨论