• 回文判断的两种方法


    //想到两种方法,一是用栈把序列逆序对比,二是直接头尾对比字符串。
    //问题:判断回文串 如1223不是回文串,而1221是
    //思路1:分析以下回文的特点,会发现回文无论是正着读还是反着读都是一样的。所以只要进一次栈,出一次栈,看进入序列是否一样就好了
    //思路2:直接判断前半段后半段对应位置是否相等。有不等的就不是回文。这个更简单些
    #include "stdio.h"
    #include "stdlib.h"
    #include "string.h"
    typedef struct stack{
        char data;
        stack *next;
    }stack;
    void Traversal(stack *p){   //遍历
        stack *q = p->next;
        while (q != NULL)
        {
            printf("%C ",q->data);
            q = q->next;
        }
    }
    void init(stack *&s);
    int isEmpty(stack *s);
    void push(stack *&s,char x);
    int pop(stack *&s,char &x);
    //直接头尾对比判断回文
    // int huiwen(char *s,int n){     //回文返回0,非回文返回1
    //     stack *c = (stack *)malloc(sizeof(stack));
    //     c->next = NULL;
    //     for(int i=0,j=n-1;i<=j;i++,j--){
    //         if(s[i]!=s[j]) return 1;    //数组版
    //     }
    //     return 0;
    // }

    //通过栈判断
    int huiwen(char *s,int n){   //参数:字符串s,字符串长度n
        stack *c = (stack *)malloc(sizeof(stack));
        c->next = NULL;
        for(int i=0;i<n;i++) push(c,s[i]);
        char a;
        for(int i=0;i<n;i++){
            pop(c,a);
            if(s[i] != a) return 1;    //不是回文 //栈会把进栈序列逆序输出,如果输出序列等于字符串,那就是回文
        }
        return 0;
    }

    int main(){
        //string s="1221";
        char *str="ssccss";
        printf("%d",huiwen(str,6));
        getchar();
        return 0;
    }

    //注:在考试的时候直接调用函数就好了。最多写个头文件
    void init(stack *&s){     //栈初始化
        s = (stack *)malloc(sizeof(stack));
        s->next = NULL;
    }

    int isEmpty(stack *s){   //栈判空。栈空(栈链表只有头节点)1,不空0
        if (s->next == NULL){
            return 1;
        }else{
            return 0;
        } 
    }

    void push(stack *&s,char x){    //进栈   参数:栈s,进栈元素x
        stack *p=(stack *)malloc(sizeof(stack));
        p->next = NULL;
        p->data = x;
        p->next = s->next;
        s->next = p;
    }

    int pop(stack *&s,char &x){   //出栈,参数:栈s,出栈元素X
        stack *p;
        if(isEmpty(s) == 1) return 0;   //栈空,无法出栈
        p = s->next;
        x = p->data;
        s->next = p->next;
        free(p);
        return 1;
    }


  • 相关阅读:
    RMI几种公布和引用服务的方式
    mysql 多日志表结果集合拼接存储过程
    USRP通信的结构体和常量(上位机、下位机共用)
    Flash Builder4破解步骤
    leetcode 217 Contains Duplicate 数组中是否有反复的数字
    关于权限表的基本设计
    Objective-C之成魔之路【7-类、对象和方法】
    vs2008C1902程序数据库管理不匹配
    配置hadoop集群一
    BZOJ 2338 HNOI2011 数矩形 计算几何
  • 原文地址:https://www.cnblogs.com/BreezeFeng/p/13986604.html
Copyright © 2020-2023  润新知