zoukankan      html  css  js  c++  java
  • 回文判断的两种方法

    //想到两种方法,一是用栈把序列逆序对比,二是直接头尾对比字符串。
    //问题:判断回文串 如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;
    }


  • 相关阅读:
    用wamp配置的环境,想用CMD连接mysql怎么连
    Mysql删除表
    MySQL创建表
    Leetcode 130. Surrounded Regions
    Leetcode 111. Minimum Depth of Binary Tree
    Leetcode 110. Balanced Binary Tree
    Leetcode 98. Validate Binary Search Tree
    Leetcode 99. Recover Binary Search Tree
    Leetcode 108. Convert Sorted Array to Binary Search Tree
    Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
  • 原文地址:https://www.cnblogs.com/BreezeFeng/p/13986604.html
Copyright © 2011-2022 走看看