原创 字符中心对称判断

2010-1-18 18:15 2266 7 7 分类: 软件与OS

#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");//对称


}


97c208c9-b61b-4939-b8d0-0ff3651a449f.jpg

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条