数据结构第四章:串

本文介绍了串(字符串)作为特殊线性表的概念,强调了串的整体操作特性,并详细阐述了串的三种存储实现方式:定长顺序存储、堆分配存储和块链存储,以及串的模式匹配基本思想。
摘要由CSDN通过智能技术生成

4.1 串类型的定义

字符串可以看作是一种特殊的线性表,字符串的数据对象约束为字符集(非数值数据)。

不同的应用所处理的串的特点亦不相同。

在线性表的基本操作中,大多以“单个元素”作为操作对象,而在串中则是以“串的整体”或一部分作为操作对象。

  • 串的定义:

    串(String)是零个或多个字符组成的有限序列。
    一般记为:s=′a1a2…an′ (n≥0)
    s是串的名字, a1a2…an是串s的值
    ai可以是字母、数字或其它字符;
    串内字符的数目n称为串的长度。
    零个字符的串称为空串(null string),其长度为0。

  • 子串:

    串中任意个连续的字符组成的子序列称为该串的子串。

  • 主串:

    包含子串的串相应地称为主串。

  • 字符的位置:

    通常将字符在串中的序号称为该字符在串中的位置。

  • 子串的位置:

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

  • 两个串相等:

    当且仅当两个串的值相等时,称这两个串是相等的,即只有当两个串的长度相等, 并且每个对应位置的字符都相同时才相等。

  • 关于串定义的说明:

    串定义中的一对单引号本身不属于串!
    其作用避免与变量名或数的常量混淆
    空串(null string)和空格串(blank string)是不同的!
    为了清晰起见,用符号“ø”表示“空串”

  • 在操作上:

    在线性表中,操作的对象基本上都是数据元素;
    在串中,操作的对象通常以子串为单位。
    例如:查找子串、求取子串、插入或删除子串等。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于串的基本操作集可以有不同的定义方法,在使用高级程序设计语言中的串类型时,应以该语言的参考手册为准。
在上述抽象数据类型定义的13种操作中,
串赋值 StrAssign、串复制 Strcopy、
串比较 StrCompare、求串长 StrLength、
串联接 Concat 以及求子串 SubString

等六种操作构成串类型的最小操作子集。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
串的逻辑结构和线性表极为相似,区别仅在于串的数据对象约束为字符集。
串的基本操作和线性表有很大差别。
在线性表的基本操作中,大多以“单个元素”作为操作对象;
而在串的基本操作中,通常以“串的整体”作为操作对象。
在早期的程序设计语言中,串只是作为输入或输出的常量出现,则只需存储此串的串值,即字符序列即可。之后在多数非数值处理的程序中,串均以变量的形式出现,因此作为一个数据类型也就存在一个存储表示和实现的问题。

4.2 串的表示和实现

1.串的定长顺序存储表示

用一组地址连续的存储单元存储串值的字符序列。这是一种静态存储结构,串值的存储分配是在编译时完成的。因此,需要预先定义串的存储空间大小。

#define MAXSTRLEN 255; //定义能处理的最大的串长度
typedef unsigned char SString[MAXSTRLEN+1]; //0号单元存放串的长度

串的实际长度可在这个预定义长度的范围内随意设定,超过预定义长度的串值则被舍去,称之为“截断”。
串的联接算法

status ConCat(SString S1,SString S2,SString &T){
    
//用T返回由S1和S2联接而成的新串。若未截断,则返回TRUE,否则FALSE。
	if(S1[0]+S2[0]<=MAXSTRLEN){
     //未截断
     	T[1..S1[0]]=S1[1..S1[0]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值