判断中心对称

来源:互联网 发布:flir红外热像仪软件 编辑:程序博客网 时间:2024/04/29 23:08
//同一字符串,存入链表和栈,通过比较出栈元素和链表来判断是否中心对称#include<stdio.h>#include<malloc.h>#include<string.h>//定义单链表结构类型typedef char datatype;//datatype == chartypedef struct node   //结点结构体,内有char类型data,结点指针*next{datatype data;    struct node *next;}linklist;          //linklist类型结点//定义顺序栈结构类型const int maxsize=40;  //栈最大40typedef struct{datatype elements[maxsize];    int top;}stack;//栈内元素,栈顶//栈初始化,分配s内存空间,top置为-1void setnull(stack *&s){s=(stack*)malloc(sizeof(stack));s->top=-1;}//求单链表长度,p指向第一个结点,p不为空则一直进行n++,p移位int length(linklist *head){linklist *p=head->next;    int n=0;    while(p!=NULL){n++;p=p->next;}    return n;}//输出单链表,一次输出一个void printlink(linklist*head){linklist *p=head->next;    while(p!=NULL){    printf("%c",p->data);    p=p->next;    }    printf("\n");}//建立具有头结点单链表void create(linklist *&head,datatype *str){datatype *p;p=str;    linklist *s, *r;    head=(linklist*)malloc(sizeof(linklist));    r=head;    while(*p!='\0'){       s=(linklist*)malloc(sizeof(linklist));       s->data=*p;       r->next=s;       r=s;       p++;   }   r->next=NULL;}//顺序栈入栈void push(stack*s,datatype e){s->top++;s->elements[s->top]=e;}//顺序栈出栈datatype pop(stack*s){datatype temp; s->top--;temp=s->elements[s->top+1];return temp;}//添加判字符串否中心对称算法int symmetry(linklist *head,stack *s){int i,a;datatype e;linklist *p=head->next;    a=length(head)/2;if (length(head)%2==0){for (i=1;i<=a;i++){ e=p->data; push(s,e); p=p->next;} } else{ for (i=1;i<=a;i++){ e=p->data; push(s,e); p=p->next;}if (i==a+1){e=p->data;push(s,e);}}    while (p){if(p->data!=pop(s)) return 0;else p=p->next;} return 1;}int main(){    linklist *head;stack *s;    datatype str[80];    printf("输入字符串\n");    gets(str);    create(head,str);    printlink(head);    setnull(s);    if(symmetry(head,s))        printf("字符串\"%s\"中心对称\n",str);    else        printf("字符串\"%s\"不是中心对称\n",str);}

0 0
原创粉丝点击