数据结构-串

以下所有为个人学习笔记(王道考研-数据结构  )

定义(逻辑结构)

补:数据结构三要素--逻辑结构、数据的运算、存储结构(物理结构)【存储结构不同,运算的实现方式不同】

子串的位置是第一个字符在主串中的位置

基本操作(运算)

 存储结构

顺序存储

//静态数组实现(定长顺序存储)
#define MAXLEN 255    //预定义最大串长为255
typedef struct{
    char ch[MAXLEN];    //每个分量存储一个字符
    int length;         //串的实际长度
}SString;


//动态数组实现(堆分配存储)
typedef struct{
    char *ch;            //按串长分配存储区,ch指向串的基地址
    int length;          //串的长度
}HString;
HString S;
S.ch=(char *)malloc(MAXLEN *sizeof(char));    //用完需要手动free
S.length=0;

方案2的缺点:ch[0]只能表示0-255

方案3的缺点:要想知道length只能遍历

链式存储

typedef struct StringNode{
    char ch;
    struct StringNode *next;
}StringNode, *String;

typedef struct StringNode{
    char ch[4];    //每个结点存多个字符
    struct StringNode *next;
}StringNode, *String;

 

基于顺序存储实现基本操作

 

 字符串模式匹配

主串

子串--主串的一部分,一定存在

模式串--不一定能在主串中找到

字符串模式匹配:在主串中找到与模式串相同的子串,并返回其所在位置。

朴素模式匹配算法

将主串(长度为n)中所有长度为m的子串【最多对比n-m+1 个子串】依次与模式串(长度为m)对比,直到找到一个完全匹配的子串,或所有的子串都不匹配为止。

 

i=i-j+2;

j=1; 

大懒虫一个别管了 

暴力解决 

KMP算法

改进思路:主串指针不回溯,只有模式串指针回溯 

右下角为由模式串确定的next数组 

优先考虑上下能够匹配长度更长的情况 

 特别地,next[1]=0,i++,j++

 

 

 

 

38没看,回头不会了当复习课看

求next数组

 

 

 next[1]无脑0,next[2]无脑1

最后那个40真的真的不行了 明天补 

  • 18
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值