数据结构(第四章)

数据结构(第四章)

  • 定义:串是由零个或多个字符组成的有限序列。
  • 串中任意多个连续的字符组成的子序列称为该串的子串,包含子串的串称为主串。某个字符在子串中的序号称为该字符在串中的位置。子串在主串中的位置以第一个字符在主串中的位置来表示。

串的存储结构

  1. 定长顺序存储
#define MaxSize 50
typedef struct {
   char ch[MaxSize]; //每个分量存储一个数组
   int length;  //串的实际长度
}SString ;
  1. 堆分配存储方式
typedef struct {
    char *ch;  //按串长分配存储区,ch指向串的基地址
    int length; //串的长度
}HString;

串的模式匹配

  1. BF算法(简单的模式匹配算法)
int BF(string S , string T){
    int i =1; //母串的遍历指针
    int j=1;//子串的遍历指针
    while(i<=S.length()&&j<=T.length()){ //循环遍历
        if (S[i]==T[j]){  //当子串与母串字符匹配,则向后遍历
            ++i;
            ++j;
        }
        else{   //该位置子串字符与母串不匹配,则母串退回到起始位置的下一位置。子串退回到初始位置
            i=i-j+2;
            j=1;
        }
    }
    if (j>T.length())
        return i-T.length();
    else
        return 0;
}
  1. KMP算法
  • next数组
void Get_next(string T , int next[]){
    int i=1; //遍历指针
    int j=0;//前后缀相同的元素个数
    next[1]=0;//第一位置无脑为0
    while(j<T.length()){
        if (j==0||T[i]==T[j]){
            ++i;
            ++j;
            next[i]=j;
        }else{
            j=next[j];
        }
    }
}
int KMP(string S ,string T ,int next[]){
    int i=1;
    int j=1;
    while(i<S.length()&&j<T.length()){
        if (j==0||S[i]==T[j]){
            ++i;
            ++j;
        }
        else{
            j=next[j];
        }
    }
    if (j>T.length())
        return i-T.length();
    else
        return 0;
}
  • nextval数组
void Get_nextval(string T , int nextval[]){
    int i=1; //遍历指针
    int j=0; //前后缀相同的元素个数
    nextval[1]=0;
    while(j<T.length()){
        if (j==0||T[i]==T[j]){
            ++i;++j;
            if (T[i]!=T[j])
                nextval[i]=j;
            else
                nextval[i]=nextval[j];
        }
        else{
            j=nextval[j];
        }
    }
}

数组

  • 定义:数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素

特殊矩阵的压缩存储

这里先进行了解

广义表

  • 定义:广义表是线性表的推广
  • 特点:广义表的定义是一个递归的定义

仅供参考,了解

posted @   ShamUnite  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示