您的位置:首页 > 其它

数算 3

2016-03-03 15:16 183 查看
字符串
顺序表示

struct SeqSting{
int MAXNUM;
int n;
char *c;
};
typedef struct SeqString *PSeqString;


链接表示

struct StrNode;
typedef strct StrNode *PStrNode;
struct StrNode{
char c;
PStrNode link;
};
typedef struct StrNode *LinkStrNode;


模式匹配问题

makeNext(PSeqString p, int *next){
int i=0, k=-1;
next[0]=-1;
while (i<p->n-1){
while (k>=0&&p->c[i]!=p->c[k])
k=next[k];
i++;
k++;
next[i]=k;
}
}


View Code
简单,易于理解,但是效率不高。算法运行时间是 O(m*n).

makenext 函数可以修改的更好。

makeNext (PSeqString p, int *next){
int i=0, k=-1;
next[0]=-1;
while (i<p->n-1){
while (k>=0 && p->c[i]!=p->c[k])
i++;k++;
if (p->c[i]==p->c[k]) next[i]=next[k];
else next[i]=k;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: