数据结构——线性结构的常见应用(串)

一. 思维导图

在这里插入图片描述

二. 串的概述

1. 串(字符串/string)定义

来源:

  • 计算机上非数值处理的对象基本都是字符串数据

定义

  • 字符串是由零个或多个字符组成的有限序列
  • 串是内容限制为字符数据的线性表
  • 一般记为:
    在这里插入图片描述

什么是子串?

  • 串中任意多个连续的字符组成的子序列

什么叫主串?

  • 包含子串的串

什么叫字符的位置

  • 某个字符在串中的序号称为该字符再串中的位置

  • 子串在主串中的位置以子串的第一个字符在主串中的位置来表示

    串A='China Beijing'    长度为13
    串B='Beijing'		   长度为7
    串C='China'			   长度为5
    B和C是A的字串,B在A中的位置是7,C在A中的位置是1
    

什么叫串相等?

  • 当两个串长度相同且对应位置的字符都相等多

2. 串与线性表的对比

逻辑结构上

  • 串的数据对象限定在字符集

基本操作上

  • 线性表主要以单个元素作为操作对象(增删改查)
  • 串以子串作为操作对象(增删改查)

三. 串的存储结构

1. 定长顺序存储表示

定义

  • 用一组地址连续的存储单元存储串值的字符序列
  • 每个串变量占有固定长度的存储区,即定长数组

在这里插入图片描述

串的实际长度

  • ≤预定义长度MAXLEN,超过的部分被截断,舍弃
  • 解决被截断的方法,使用动态分配字符串大小

串长的表示方法:

  • 1)加一个额外变量len
  • 2)在串值后面加一个不计入串长的结束标记字符"\0"(这时串长为隐含值)

串的算法操作
添加代码

2. 堆分配存储表示

定义:

  • 以一组地址连续的存储单元存放串值的字符序列,但是他们的存储空间在程序执行过程中动态堆分配得到的

在这里插入图片描述
什么叫堆分配

  • C语言中,有一个堆的自由存储区,用malloc()和free()函数来完成动态存储管理
  • 利用malloc()为每个新产生的串分配一块实际串长所需的存储空间,分配成功返回一个指向起始地址的指针,作为串的基地址;分配失败返回NULL,以及分配的空间可以使用free()释放掉

串的算法操作
添加代码

3. 块链存储表示

定义:

  • 采用链式方式存储串值,每个结点既可以是存放一个字符,也可以存放多个字符
  • 每个节点称为块
  • 整个链表称为块链结构

在这里插入图片描述

四. 串的模式匹配

1. 定义

  • 子串的定位操作称为串的模式匹配
  • 就是求子串(模式串)在主串中的位置

2. 模式匹配的算法

(1). 暴力匹配算法

(2). KMP算法(next数组)

(3). KMP算法优化(nextval数组)

未完待续…

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值