李春葆《数据结构教程》笔记和课后习题详解(串)【圣才出品】

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第4章串

4.1 复习笔记

一、串的基本概念

1.串

(1)定义

串(或字符串)是由零个或多个字符组成的有限序列,记作:str=“a1a2…a n”(n≥0)。其中,str是串名,用双引号括起来的字符序列为串值,引号是界限符,a i(1≤i≤n)是一个任意字符(字母、数字或其他字符),它称为串的元素,是构成串的基本单位,串中所包含的字符个数n称为串的长度,当n=0时,称为空串。

(2)双引号的作用

将串值括起来的双引号本身不属于串,它的作用是避免串与常数或标识符相混淆。例如,A="123"是数字字符串,长度为3,它不同于常整数123。

(3)空串和空白串

通常,将仅由一个或多个空格组成的串称为空白串。注意,空串和空白串的不同,例如“”(含一个空格)和“”(不含任何字符)分别表示长度为1的空白串和长度为零的空串。

(4)子串和主串

在一个串中由任意连续的字符组成的子序列称为该串的子串,例如,"a"、"ab"、"abe"和"abed"等都是"abede"的子串,包含子串的串相应地称为主串。通常称字符在序列中的序号为该字符在串中的位置,例如字符元素a i(1≤i≤n)的序号为i。子串在主串中的位置则

以子串的第一个字符首次出现在主串中的位置来表示。例如,设有两个字符串s和t:

则它们的长度分别为17、2;t是s的子串,s为主串。t在s中出现了两次,其中首次出现所对应的主串位置是3,因此,称t在s中的序号(或位置)为3。

若两个串的长度相等且对应字符都相等,则称这两个串是相等的。当两个串不相等时,可以按“词典顺序”区分大小。

(5)串和线性表的区别

串和线性表的唯一区别是串中的每个元素是单个字符,而线性表中的每个元素可以是自定义的其他类型。

2.串的抽象数据类型

抽象数据类型串的定义如下:

ADT String

{

数据对象:

D={a i|1≤i≤n,n≥0,a i为char类型)

数据关系:

R={r}

r={|a i,a i+1 D,i=1,…,n-1}

基本运算:

void StrAssign(cstr)//由字符串常量cstr创建一个串,即生成其值等于cstr的串void StrCopy(t)//复制串,由串t复制产生一个串

int StrLength()//求串长,返回当前串中字符的个数

String Concat(t)//连接串,返回一个当前串和串t连接后的结果

StringSubStr(i,j)/*求子串,返回当前串中从第i个字符开始的由j个连续字符组成的子串*/

String InsStr(i,s)//插入串,返回串s插入到当前串的第-个位置后的子串

String DelStr(i,j)//删除串,返回当前串中删去从第-个字符开始的j个字符后的结果

String RepStr(i,j,s)/*替换串,返回用串s替换当前串中第i个字符开始的j个字符后的结果*/

DispStr()//输出串,输出当前串的所有元素值

}

二、串的存储结构

1.串的顺序存储结构—顺序串

(1)顺序串的存储

在顺序串中,串中字符被依次存放在一组连续的存储单元中。一般来说,一个字节(8位)可以表示一个字符(即该字符的ASCII码)。和顺序表一样,用一个data数组(大小为MaxSize)和一个整型变量length来表示一个顺序串,length表示data数组中实际字符的个数。

(2)SqStringClass类

设计顺序串类SqStringClass如下,

说明:在C++语言中提供了字符数组来存放字符串,以空字符'\0'标识字符串结束.并包含了前面列出的大部分串运算功能,本节主要通过自己组织和实现串来介绍数据结构算法的一般设计方法。

(3)串基本运算的算法

①顺序串的初始化和销毁

顺序串的初始化和销毁分别通过构造函数和析构函数来实现,对应的算法如下:

②建立串:StrAssign(cstr)

由一个字符串常量cstr建立一个顺序串对象.即生成一个其值等于cstr的顺序串对象,

这里采用重载“-”运算符实现。其对应的算法如下:

例如,cstr为C++的字符串”abcdef”,s为SqStringClass类对象,执行s-cstr赋值的示意图如图4-1所示。

图4-1 串赋值示意图

③复制串:StrCopy(t)

将顺序串t复制给当前串对象,这里也是采用重载“=”运算符实现的。其对应的算法如下:

假设s为顺序串对象,当执行s=t时,系统会自动检测t值,如果t是一个C++字符数组,则执行建立串运算,若t为串对象,则执行复制串运算。

④求串长度:StrLength()

返回当前顺序串中的字符个数。其对应的算法如下:

⑤连接串:Concat(f)

将当前顺序串和串对象t的所有字符连接在一起形成新顺序串,并返回这个新串对象,且不改变当前串对象和串对象t的内容,这里采用重载“+”运算符实现。其对应的算法如下:

例如,连接串对象s和t产生新串对象sl的示意图如图4-2所示。

图4-2 连接串示意图

相关文档
最新文档