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

本文深入探讨了数据结构中的串、数组和广义表。串由零个或多个字符组成,其子串查找是重要的操作,如病毒DNA检测。数组是一种线性数据结构,尤其在二维数组的存储和特殊矩阵压缩存储方面有多种方法。广义表则是灵活的数据结构,可以包容不同类型的元素,包括线性表和其他复杂结构。
摘要由CSDN通过智能技术生成

第四章 串、数组和广义表

4.1 串的定义

串(String)零个或多个任意字符组成的有限序列

在这里插入图片描述

  • 字串:一个串中任意个连续的字符组成的子序列(含空串)称为该串的子串.
    • 相当于子集
  • 真子串:是指不包含自身的所有子串
    • 真子集
  • 主串: 包含子串的串相应地称为珠串
  • 字符位置 字符在序列中的序号为该字符在串中的位置
  • 空格串: 由一个或多个空格组成的串 与子串不同
  • 串相等: 当且仅当两个串的长度相等,并且各个对应位置上的字符都相同的时候,这两个串才是相等的.
    • 所有空串是相等的

4.2 案例引入

串的运用非常广泛,计算机上的非数值处理的对象大部分是字符串数据,例如:文字编辑,符号处理,各种信息处理系统等.

案例1: 病毒感染检测

  • 研究者将人的DNA和病毒的DNA都表示成由一些字母组成的字符串序列
  • 然后检测某种病毒DNA序列是否出现在患者的DNA序列里面,如果出现过,则此人感染了这个病毒
  • 例如:假设病毒的DNA序列为baa,患者1的DNA序列为aaabbba,则感染,患者2的DNA序列为babbba,则未感染(注意 人的DNA序列是线性的,但是病毒的DNA是环状的)
  • 在这里插入图片描述

可以看出,字符串查找很重要,为我们的生活带来了很大的便捷

4.3 串的类型定义,存储结构及运算

4.3.1 串的类型定义

在这里插入图片描述

在这里插入图片描述

串中的元素逻辑关系与线性表相同,可以采用与线性表相同的存储结构

4.3.2 串的存储结构

物理上的元素的逻辑关系与逻辑上的元素关系一致(不需要额外的指针来表示出串的顺序)

串的顺序存储结构

#define MAXLEN 255

typedef struct{
    char ch[MAXLEN + 1];//储存串的一维数组,0号位置闲置不用,这里一定要是字符型
    
    int length;//串的当前长度
    
}SString

如果我们只用用于存储而不频繁的插入和删除,那么我们就使用这个存储结构的串

串的链式存储结构

在这里插入图片描述

优点: 操作方便 缺点: 存储密度低(1/(1+4)=0.2)

还有一种方法,可以大大提高存储密度(4/(4+4) = 0.5)

这里的结点中的数据域可以叫做存储块

在这里插入图片描述

因此我们常用下面这种链式存储结构----块链结构

#define CHUNKSIZE 80;//块的大小可由用户定义

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

typedef struct{
    Chunk *head,*tail;
    
    int curlenl;
}LString //字符串的块链结构

4.3.3 串的模式匹配算法

算法目的:

​ 确定主串中所含的字串第一次出现的位置(定位)

算法应用:

  • 搜索引擎,拼写检查,语言翻译,数据压缩

算法种类

  • BE算法(Brute-Force,又称古典的,经典的,朴素的,穷举的)
  • KMP算法(特点:速度快)
BF算法

简称简单匹配算法。采用穷举法的思想

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值