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;
    }


  • 相关阅读:
    从SmartObject中读取数据
    将数据存储到SmartObject中
    浅识K2 blackpearl中SmartObject
    .net基础
    字符编码
    PowerDesigner教程系列
    Asp.net 2.0(C#)图片存储到数据库和从数据库读取显示
    按回车提交问题:
    .NET设计模式(2):单件模式(Singleton Pattern)
    常用正则表达式收集
  • 原文地址:https://www.cnblogs.com/BreezeFeng/p/13986604.html
Copyright © 2011-2022 走看看