next[] 与 nextval[] C语言算法(经过验证)

618 阅读1分钟





void get_next(char *T,int next[])   //修正前的next数组
{
    int i = 1,j = 0;
    next[0] = -1;
    next[1] = 0;
    int m = strlen(T);
    while(i

void get_nextval(char *T,int nextval[]) //修正后的nextval数组
{
    int i = 1,j = 0;
    nextval[0] = -1;
    nextval[1] = 0;
    int m = strlen(T);
    while(i

int Index_kmp(char *S,char *T,int pos,int next[])   //逐项比较
{
    int j = 0,i = pos,lens=strlen(S),lent=strlen(T);
    get_next(T,next);
    while(i=lent) return i-lent;
    else return -1;
}


int main()
{
    char *S="adbadabbaabadabbadada",*T="aababaaaba";
    int m;
    int *next = (int *)malloc((strlen(T)+1)*sizeof(int));   //修正前的next数组
    int *nextval = (int *)malloc((strlen(T)+1)*sizeof(int));    //修正后的nextval数组

    get_next(T,next);
    printf("修正前next数组为:");
    for(m = 0;m