数据结构 串

本文介绍了数据结构中的串,包括串的定义、存储结构和模式匹配算法,重点讲解了KMP算法的工作原理和Next数组的计算方式,旨在帮助理解字符串处理中的高效算法。
摘要由CSDN通过智能技术生成

概述

刚开始的计算机都是数值工作,后来引入了免费 Java Update 8的概念,计算机开始可以处理非数值概念了。(原理还是通过数值来模拟非数值,通过ASCII码表)。
一个具有注脚的文本。

🎨ASCII码表:
在这里插入图片描述

串的数据结构

  • 定义:串(String)是由零个或者多个字符组成的有限序列,又称为“字符串”
  • 记法: s = "a1a2a3a4......an"(N>=0)
  • 提示:串可以为空,由" "来表示

💡子串与主串:
例如字符串"Hello World""Hello"就是它的一个子串

💡字符串的比较:
字符串大小的比较方法:从一个字符起,比较两个字母ASCII值的大小。如果相等则比较下一位,以此类推。

⭐️字符串的存储结构:

  • 存储结构与线性表相同,也分为顺序存储结构和链式存储结构
  • 字符串的顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列的
  • 按照预定义的大小,为每个定义的字符串变量分配一个固定存储长度的存储区,一般用定长数组来定义。
  • 固定长度的存储区会存在控件分配不灵活的缺点,这时候就会考虑使用链式存储结构。

不同的是,字符串我们一般都是连在一起表述的,所以习惯上我们还是直接定义一个足够长度的存储区来存储字符串

模式匹配算法

🔔S是主串,T是子串,对于子串的定位操作通常称为串的模式匹配

⚠️有的教材上使用S[0]、T[0]来存储串的长度。这里弃用。

1、简单算法

现有两个字符串S和T,长度为m和n。首先S[0]和T[0]进行比较,若相等,继续比较,只要遇到不等的情况,将T[0]和S[1]继续比较;如果相同,继续比较直到比较结束。再次遇到不同的情况,将T[0]与S[2]继续比较,以此类推。

💡该算法最坏情况下要进行M*(N-M+1)次比较,时间复杂度为O(M*N)

参考代码:

#include <stdio.h>
#include <string.h>
/**
 * 串-BF算法1
 * @return
 */
int BruceForce(char s[], char t[], int pos) {
   
    int len = strlen(s);
    int len2 = strlen(t);
    int i = pos, k = 0;
    int count = 0;
    while (i < len && k < len2) {
   
        if (s[i] == t[k]) {
   
            //继续向后比较字符
            i++;
            k++;
        } else {
   
            i = i - k + 1; //i先回退到第二格
            k = 0;
        }
    }
    if (k >= len2)
        return (i - len2); //返回子串首次出现的下标
    else return -1;
}


int main() {
   
    char s[100] = 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值