块链的KMP匹配扩展,返回子串在主串中出现的所有位置

其他的增删改查的功能都实现了,剩一个功能实现不了,按照自己定的块链的存储结构,不知道KMP匹配怎么查找所有的位置,这个功能的具体描述如下:
存储一页文章,每行最多不超过80个字符,共N行。可以输入大写、小写的英文字母、任何数字及标点符号。
要求:使用高效的(如KMP)字符串匹配算法,在文章中查找某个字符串出现的所有
位置;
定义的存储结构如下:

typedef struct node
{    char data[80];  //一行字符
    int length;     //记录一行字符长度
    struct node* next;  //后继指针
    struct node* pre;   //前驱指针
    int row;       //文章的行数
}Linklist;

能不能讲讲这种结构下的查找所有位置的Kmp算法怎么写