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

主串:包含子串的串

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

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

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

定义一个结构类型:有字符数组和串的长度,在通常使用中把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. HDU 1052 Tian Ji -- The Horse Racing
  2. junit 案例(三)
  3. java oracle 分区查询_深入学习Oracle分区表及分区索引
  4. CNN分类,ResNet V1 ,ResNet V2,ResNeXt,DenseNet
  5. 【软件质量】代码注释的消极作用
  6. python编程(关于cocos2d)
  7. DQL 学习4-- Using DQL
  8. java 点云数据处理_点云数据处理学习笔记
  9. linux img镜像安装到硬盘,ESXi虚拟机使用IMG镜像安装系统(LEDE安装教程)
  10. 【8】电压比较器的阈值,窗口电压
  11. opencv实现摄像头的实时人脸识别
  12. 软磁材料和硬磁材料的区别
  13. SSM框架整合(Spring+SpringMVC+MyBatis)附源码
  14. EXCEL,如何进行查找,单条件和多条件查询
  15. javaIO体系图(2015年9月15日)
  16. 数据库的ACID(原子性、一致性、隔离性与持久性)
  17. 今日头条广告如何优化?这四个思路至关重要
  18. pycharm设置中文,字体颜色修改,设置背景图片(图文讲解)
  19. spm,afni的安装和使用心得
  20. 动态选择屏幕(FREE_SELECTIONS_INIT)

热门文章

  1. 蘑菇丁自动填写日报---Python语言实现
  2. 山重水复疑无路,柳暗花明又一村(12.15一周总结)
  3. “字面量”和“符号引用”
  4. 标准bootstrap3 form表单美化
  5. 第六章 盒子模型
  6. 2011年1月7日大恒图像面试总结
  7. Scratch(四十四):打地鼠
  8. 每周全球科技十大看点(2022.1.10-1.16)
  9. MAVEN专题之三、坐标和依赖详解
  10. CFT-ctf.show-信息收集闯关