zoukankan      html  css  js  c++  java
  • 数据结构严蔚敏书上的改进,修正最后的KMP 皇星客栈

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 void get_nextval(char T[ ],int nextval[ ])
     5 {//求模式串T的next函数修正值并存入数组nextval.    
     6     int i=1,j=0;
     7     nextval[1]=0;
     8     int length;
     9     length=strlen(T);
    10     
    11     while(i<length)
    12     {    
    13         if(j==0||T[i]==T[j])
    14         {
    15             ++i;
    16             ++j;
    17             if(T[i]==T[j]) 
    18                 nextval[i]=nextval[j];
    19             else 
    20                 nextval[i]=j;
    21         }    
    22         else        
    23             j=nextval[j];        
    24     }    
    25 }
    26 
    27 
    28 
    29 int Index_KMP(char S[ ],char T[ ],int pos,int nextval[ ])
    30 {
    31     //利用模式串T的nextval函数求S在主串T的第pos个字符之后的位置的    
    32     //KMP算法。其中,S非空,1<=pos<=lengthT;
    33     int i=pos;    
    34     int j=1;
    35     while(i<=S[0]&&j<=T[0])    
    36     {    
    37         if( j==0 || S[i]==T[j] )    
    38         {    
    39             ++i;    
    40             ++j;            //继续比较后继字符    
    41         }    
    42         else          
    43             j=nextval[j];  //模式串向后移动    
    44     }
    45     if(j>T[0])    
    46         return (i-T[0]);//匹配成功
    47     else     
    48         return 0;    
    49 }
    50 
    51 int main( )
    52 {    
    53     char S[256],T[256];    
    54     char *P,*Q;     
    55     int nextval[256];    
    56     int pos;  //指定在主串S中开始比较的位置    
    57     while(1)    
    58     {    
    59         P=&S[1];    
    60         Q=&T[1];    
    61         gets(P);    
    62         gets(Q);          //输入两个字符串    
    63         S[0]=strlen(P);
    64         T[0]=strlen(Q);  //得到两个字符串的长度    
    65         scanf("%d",&pos);
    66         get_nextval(T,nextval);
    67         printf("%d\n",Index_KMP(S,T,pos,nextval));
    68         getchar( );
    69     }    
    70     return 0;      
    71 }
  • 相关阅读:
    CSS样式表引用方式
    引入样式表(css)的四种方式
    html中有序列表标签ol,li的高级应用
    HTML 基本标签
    SEO中HTML标签权重列表
    HTML 和 XHTML 区别
    HTML相对路径和绝对路径
    Django静态博客开发_3_视图与模版(完成一个简单博客的建立)
    Django静态博客开发_2_模型层
    Django静态博客开发_1_入门
  • 原文地址:https://www.cnblogs.com/huangxingkezhan/p/2712148.html
Copyright © 2011-2022 走看看