数据结构(C++)学习篇(七):字符串

推荐阅读:

数据结构(C++)学习篇(三):线性表(链式表示和实现)

数据结构(C++)学习篇(四):线性表(循环链表)

数据结构(C++)学习篇(五):线性表(双向链表)-CSDN博客

数据结构(C++)学习篇(六):线性表(栈和队列)  

=============================================================

目录

字符串string

字符串定义

1.顺序存储

1.1 顺序存储定义

2.链式存储

2.1链式存储定义

模式匹配算法

BF算法(简单匹配)


字符串string

  • 定义:由零个或多个任意字符组成的有限序列。

        S = "a1a2a3....an"   (n>=0)

  • 判断两个串相等:当且仅当长度相等且各个对应位置的字符都相同。
  • 逻辑结构:线性结构。
  • 存储结构:顺序存储、链式存储。

字符串定义

1.顺序存储
1.1 顺序存储定义
#define MAXLEN 255

typedef struct{
    char ch[MAXLEN + 1];
    int length;
}SString;
2.链式存储
2.1链式存储定义
//不常用
#define CHUNKSIZE 80

typedef struct Chunk{
    char ch[CHUNKSIZE];
    struct Chunk *next;
}Chunk;

typedef struct{
    Chunk *head, *tail;
    int curlen;
}LString;

模式匹配算法

判断一个字符串是否是另一个字符串的子串(了解)。

  • BF算法(简单匹配)
//O(n*m)
int Index_BF(SString mainString, SString T)
{
    int i=1, j=1;
    while(i<=mainString.length && j<=T.length)
    {
        if(mainString.ch[i]==T.ch[j])  //依次匹配
        {
            ++i;
            ++j;
        }
        else
        {
            i=i-j+2;    //回溯重新开始匹配
            j=1;
        }
    }
    if(j>=T.length) //返回匹配的第一个字符的下标
        return i-T.length;
    else
        return 0;
}
  • KMP算法
//一脸懵逼
void get_next(SString T, int &next[])
{
    int i = 1, j = 0;
    next[1] = 0;
    while(iT.length) //返回匹配的第一个字符的下标
        return i-T.length;
    else
        return 0;
}

数组 、广义表略

视频:戳这里_B站大学

你可能感兴趣的:(数据结构,数据结构,c++,学习)