零个或多个字符组成的长度有限的序列

主串:包含子串的串

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

空格串:由一个或者多个空格的串,不是空串

串的顺序存储结构:采用数组

定义一个结构类型:有字符数组和串的长度,在通常使用中把0号位置空出来从1开始使用

串的链式存储结构:

每个节点存储一个字符,也可以每个节点存好几个字符,叫做块

 块链结构

串的模式匹配算法:确定主串中子串(模式串)第一次出现的位置

  • BF算法(简单匹配算法)(穷举法思路)

从主串的每一个字符开始依次匹配子串的字符进行匹配

重要的是匹配不成功返回的操作,i=i-j+2

时间复杂度:考虑最坏情况

  • KMP算法:比BF效率高

主串S的指针i不必回溯,匹配到哪里不成功就从哪里开始,且j也不必回到开头。例如下图,第一次匹配到S的a和T的c不成功,将主串的i指针移到不成功的a处,而子串的j也不必回到开头,第二次中的不成功的c前面是a和开头的a一样都是a,因此j如第三次的一样从b开始

为了确定j的位置,定义next[j]函数,表明模式中第j个字符与主串失配时,在模式中需要重新和主串该字符进行比较的字符的位置

计算next[j]的值方法:如下图,当j=1时值为0;当j=2时,没有前后缀,属于其他情况值为1;当j=3时,从头开始的前缀是a,后缀是b,不相等所以值为1;当j=4时同理为1;当j=5时,最大前缀为a,最大后缀也为a,于是k-1=1于是k=2next[j]也为2;当j=7时,最大前缀为ab,后缀为ab,于是k-1=2即next[j]为3.......用k-1来计算是因为比如说j=7时与主串匹配不成功了,j前面的ab与模式串开始的ab相同,于是j不必回溯到开头,而是只用回溯到开头ab后面的c位置即可,于是next[j]=3

next函数的改进:存在下列情况需要一直回退j,既然j=4为a且前面都是a那就不需要回退,因为b与j=4的a不匹配与前面的a也不匹配

于是用nextval来代替next

数组

二维数组定义的特殊方式:

顺序存储

因为元素个数固定,所以没有链式存储结构,也不做插入删除操作。在实际中数组在内存中时一维的,所以要将多维数组映射成一维数组的问题

稀疏矩阵:矩阵中非零元素个数较少

特殊矩阵压缩存储

对称矩阵:沿着对角线对称的元素相等

三角矩阵:对角线以上或者以上的元素(不包括对角线)全都为常数c

对角矩阵

广义表

每一个元素可以是一个原子,也可以是一个广义表,即拓宽了的线性表

通常记为LS,通常用大写表示广义表,小写表示原子

表头:广义表的第一个元素,可以是原子,也可以是线性表

表尾:除了表头外剩余元素构成的表

深度:该广义表展开后所包含括号的重数

案例分析

病毒感染检测(模式匹配)从主串中找到该病毒字符串,因为病毒为环状,所以对于baa病毒来说,baa和aab和aba都是病毒

简便的查找病毒:用两个病毒字符串的空间存储病毒字符串,即将其相连,从长度2m的字符串中抽取m个字符串进行模式匹配

数据结构复习——串、数组和广义表相关推荐

  1. [数据结构与算法] 串,数组和广义表

    串偏向于算法,数组和广义表偏向于理解 第四章 串.数组和广义表 4.1 串的定义 4.2 案例引入 4.3 串的类型定义,存储结构及运算 4.3.1 **串的类型定义** 4.3.2 串的存储结构 4 ...

  2. 数据结构之【数组和广义表】复习题

                          第 4  章  数组和广义表 一.选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A666 ...

  3. 【数据结构】CH6 数组和广义表

    目录 前言 一.数组 1.数组的基本概念 (1)定义 (2)性质 (3)d维数组的抽象数据类型 (4)[例6.1] 2.数组的存储结构 (1)一维数组的存储结构 (2)二维数组的存储结构 (3)三维数 ...

  4. 【数据结构总结】第四章:串、数组和广义表(线性结构)

    第四章:串.数组和广义表(线性结构) 提示:本文主要是以思维导图的形式概括数据结构第一章的精华内容,基本不会用到文字性的内容,目的是为了给大家梳理每个重要的知识点的相关概念,方便大家在复盘的时候快速阅 ...

  5. 数据结构数组计算机中的应用,2018考研计算机:数据结构数组和广义表复习重点...

    2018考研计算机:数据结构数组和广义表复习重点 2017-08-17 16:00 | 考研集训营 <数据结构(C语言版)>复习重点在二.三.六.七.九.十章,考试内容两大类:概念,算法, ...

  6. 《数据结构》-第四章 串、数组和广义表(习题)

    第四章 串.数组和广义表练习题 本章考点较少易于掌握,对于串的重点考点为串的模式匹配算法:数组的主要考点为数组下标与存储地址计算和特殊矩阵的压缩存储方法:针对广义表的考点主要为在广义表中取原子项(表) ...

  7. 数据结构:串、数组和广义表

    串 线性结构:线性表.栈和队列.串与数组和广义表 串的逻辑结构和线性表极为相似,区别仅在于串的数据对象限定为字符集.在基本操作上,串和线性表有很大差别.线性表的基本操作主要以单个元素作为操作对象,如查 ...

  8. 数据结构(串、数组和广义表)

    串.数组和广义表 1.串 ①.串的定义 ②.串的顺序存储 ③.串的链式存储 ④.串的模式匹配算法 2.数组 ①.数组的定义 ②.数组的顺序存储 ③.特殊矩阵的压缩存储 3.广义表 ①.广义表的定义 ② ...

  9. 【数据结构Note4】-串、数组和广义表(kmp算法详解)

    文章目录 串.数组和广义表 1. 串 1.1 串的概念和结构 1.2 顺序串和链串 1.3 BF算法--串的模式匹配法之一 1.5 KMP算法--串的模式匹配法之一 1.5.1 next数组 1.5. ...

  10. 数据结构(C语言第2版) 课后习题答案之第四章 串、数组和广义表

    目录 第4章  串.数组和广义表 1.选择题 (1)串是一种特殊的线性表,其特殊性体现在(  ). (2)串下面关于串的的叙述中,(  )是不正确的? (3)串"ababaaababaa&q ...

最新文章

  1. 任正非最新署名文章:不要因为美国打压而放弃全球化战略
  2. Ubuntu 16.04禁用来宾账号(Guest User)
  3. 发展受阻第一至四季/全集Arrested迅雷下载
  4. EOS大神,C++写的高发并行区块链
  5. VTK:图片之ImageSeparableConvolution
  6. Notice: Undefined variable: id in D:\phpStudy18\PHPTutorial\WWW\sqli-labs-master\Less-32\index.php o
  7. virtual box虚拟机分区后下一步看不见解决
  8. 8086汇编4位bcd码_238期中4头3尾,排列五第19239期爱我彩规
  9. pat 乙级 1023 组个最小数(C++)
  10. android 使用javascript,可以在Android中使用JavaScript吗?
  11. 初学者Web介绍一些前端开发中的基本概念用到的技术
  12. matlab如何测两点的角度_【邢不行|量化小讲堂系列01-Python量化入门】如何快速上手使用Python进行金融数据分析...
  13. 【机器学习】Matlab中实现QQ-plot的一个好工具gqqplot
  14. sun java认证考试大纲_SUN认证JAVA程序员考试大纲
  15. 2019五一联赛建模心得
  16. Miracle密码算法开源库(二)源码分析 :mralloc.c、mrarth0.c
  17. 牛客假日团队赛6 F. Mud Puddles
  18. STM32HAL库函数
  19. opencv中的透射变换
  20. 聊天上怎么使用计算机,微信在聊天中置顶怎么用?微信文章在聊天中置顶使用方法...

热门文章

  1. 同花顺股票交易接口的编写POST接口
  2. 烈风马德里同java_特斯拉94跟这款烈风马德里哪个好一点?
  3. Python3内置函数大全,文章有点长请耐心一点哦
  4. PHP如何生成大数组「考虑内存」
  5. WinSCP集成PuTTY
  6. 3D与2D动画哪一个更容易?
  7. SecureCRT使用方法+下载链接
  8. 文件服务器安装配置说明手册,FreeBSD全能服务器安装手册之文件服务器篇之A安装配置篇(5)-站长资讯中心...
  9. RG Magic Bullet 15(中英对照)
  10. 数论概论读书笔记 13.素数的计数