zoukankan      html  css  js  c++  java
  • 基本算法实现(C)

    模式串匹配算法:

    #include "stdio.h"
    int Index(char *S,char *T,int pos)
    {
        int i,j,slen,tlen;
        slen=strlen(S);
        tlen=strlen(T);
        i=pos;
        j=0;
        while(i<slen&&j<tlen)
        {
            if(S[i]==T[j])
            {
                i++;
                j++;
            }
            else
            {
                i=i-j+1;//如果j=0就相当于将i右移一位
                j=0;
            }
        }
        if(j>=tlen)
            return i-tlen;
        else
            return -1;
    }
    void main()
    {
        int i=0;
         char s[]="assacashhhghkjklklklljlhghfgfdfsdshjhjjjjjjjjjjjjghfgfgdfdfdsdsadghyyy6577777756fgdssd";
         char p[]="hhhgh";
        i=Index(s,p,1);
        printf("i=%d\n",i);
    }
    #include "stdio.h"
    void Get_next(char *p,int next[])
    {
        int i,j,slen;
        slen=strlen(p);
        i=0;
        next[0]=-1;
        //next[1]=0;
        j=-1;
        while(i<slen)
        {
            if(j==-1||p[i]==p[j])
            {
                i++;
                j++;
                next[i]=j;
            }
            else j=next[j];
        }
    }
    int Index_KMP(char *s,char *p,int pos,int next[])
    {
        int i,j,slen,plen;
        i=pos-1;
        j=-1;
        slen=strlen(s);
        plen=strlen(p);
        while(i<slen&&j<plen)
        {
            if(j==-1||s[i]==p[j])
            {
                i++;
                j++;
            }
            else j=next[j];
        }
        if(j>=plen) return i-plen;
        else return -1;
    }
    void main()
    {
        char s[]="assacashhhghkjklklklljlhghfgfdfsdshjhjjjjjjjjjjjjklkloiiuui9   igghfgfgdfdfdsdsadghyyy6577777756fgdssd";
        char p[]="jjjjjjjklkloiiuui9   igghfgfgdf";
        int next[100];
        Get_next(p,next);
        printf("%d\n",Index_KMP(s,p,0,next));
    
    
    }

    LCS(最长公共字串):

    #include "stdio.h"
    void LCS(char s1[],char s2[])
    {
        int i,j,begin=0,l1,l2,maxlen=0,*matrix;
        l1=strlen(s1);
        l2=strlen(s2);
        matrix=(int *)malloc(l1*sizeof(int));
        //for(i=0; i<l1; i++)matrix[i]=0;
        for(i=0; i<l2; i++)
            for(j=l1-1; j>=0; --j)
            {
                if(s2[i]==s1[j])
                {
                    if((j==0)||(i==0))
                        matrix[j]=1;
                    else
                        matrix[j]=matrix[j-1]+1;
                }
                else
                    matrix[j]=0;
                if(matrix[j]>maxlen)
                {
                    maxlen=matrix[j];
                    begin=j;
                }
            }
        if(maxlen==0)
            printf("没有公共子串");
        else
        {
            printf("公共子串长度:%d\n",maxlen);
            printf("begin=%d\n",begin);
            for(i=begin-maxlen+1; i<=begin; i++)
                printf("%c",s1[i]);
        }
        free(matrix);
    }
    void main()
    {
        char s1[]="assacashhhghkjklklklljlhghfgfdfsdshjhjjjjjjjjjjjjghfgfgdfdfdsdsadghyyy6577777756fgdssd";
        char s2[]="hhhgh";
        LCS(s1,s2);
    }
    汉诺塔实现:
    /* Note:Your choice is C IDE */
    #include "stdio.h"
    void main()
    {
        void hanoi(int n,char a,char b,char c);
        hanoi(34,'A','B','C');  
    }
    void hanoi(int n,char a,char b,char c)
    {
        if(n==1)printf("%c=>%c\n",a,c);
        else
        {
            hanoi(n-1,a,c,b);
            printf("%c=>%c\n",a,c);
            hanoi(n-1,b,a,c);
        }
    }
  • 相关阅读:
    PROXY SERVER 代理服务器
    微信小程序跳转navigateTo与redirectTo
    在C#中实现类似位域的操作
    用WPF的Dock控件重写了原来的那个正则表达式测试工具
    获取文件夹所占空间的大小
    索尼正式公布新掌机PSP2——NGP
    一个打印螺旋数的程序
    在C#中实现BigEndian的数字
    通过程序关闭显示器
    索爱的Xperia arc太漂亮了
  • 原文地址:https://www.cnblogs.com/zhanjindong/p/2834771.html
Copyright © 2011-2022 走看看