数据结构中的串

合集下载

数据结构中的串

数据结构中的串

next[j] = max { k | 0<k<j 且使得 1…tk-1=tj-k+1…tj-1} 当集合不空 且使得t 1
首页
其他情况
上页 下页 退出
第四章
§4.4 串的应用
一、文本编辑 二、建立索引表
思考题: 思考题: 试写出判串S是否是回文的算法。 1、试写出判串S是否是回文的算法。 若串S= S=‘ STRING’以块链存储, 2、若串S=‘THIS IS A STRING’以块链存储,结点大小 链指针占4个字节, 32位 问存储密度是多少? 为4,链指针占4个字节,即32位,问存储密度是多少? 是两个但单链表存储的串,试设计一个算法, 3、若X和Y是两个但单链表存储的串,试设计一个算法, 找出X中第一个不在Y中出现的字符来。 找出X中第一个不在Y中出现的字符来。
首页
上页
下页
退出
第四章
§4.1 串类型的定义
三、C语言常用的字符串处理的标准函数: 语言常用的字符串处理的标准函数:
int strlen(char s); int strcmp(chars1,char s2); char strcpy(char to,char from); char strcat(char to,char from) 但在抽象数据类型定义的13种操作中, 13种操作中 但在抽象数据类型定义的13种操作中,串赋值 StrAssign、串复制StrCopy、串比较StrCompare、求串 StrAssign、串复制StrCopy、串比较StrCompare、 StrCopy StrCompare StrLength、串联接Concat以及求子串SubString Concat以及求子串SubString等 长StrLength、串联接Concat以及求子串SubString等6 种操作构成串类型的最小操作子集。 种操作构成串类型的最小操作子集。 例如,可利用判等、 例如,可利用判等、求串长和求子串等操作实现串 的定位函数 Index(S,T,pos) 和串的置换操作 Replace(S,T,V)。 。 换句话说,如果在高级程序设计语言中设有"串类 换句话说,如果在高级程序设计语言中设有 串类 的话, 种操作, 型"的话,提供的基本操作不能没有这 种操作,因为它 的话 提供的基本操作不能没有这6种操作 首页 上页 下页 退出 们不能通过其它串操作实现。 们不能通过其它串操作实现。

数据结构第四章 串

数据结构第四章 串

数据结构第四章串在数据结构的世界里,串是一种非常基础且重要的结构。

它看似简单,却在很多实际的程序设计和应用中发挥着关键作用。

串,简单来说,就是由零个或多个字符组成的有限序列。

这就好比我们日常生活中的一句话、一段文字或者一个密码。

从存储方式上来看,串可以采用顺序存储和链式存储两种方式。

顺序存储就像是把一串珠子穿在一根线上,珠子依次排列,位置固定。

在计算机中,我们可以用一个连续的数组来存储串中的字符。

这种方式简单直观,访问速度快,但存在着一些局限性。

比如说,如果我们事先不知道串的长度,可能会造成存储空间的浪费或者不足。

相比之下,链式存储则更加灵活。

它就像把珠子用链条串起来,每个珠子(也就是字符)都有一个指针指向下一个珠子。

这样,即使在插入或删除字符时,也不需要像顺序存储那样进行大量的数据移动。

但是,链式存储的缺点是访问速度相对较慢,因为需要通过指针依次查找。

接下来,让我们看看串的一些基本操作。

串的比较是经常会用到的操作。

比较两个串的大小,不能像比较数字那样简单地直接比较,而是要从串的第一个字符开始,逐个字符进行比较。

如果在某个位置上的字符不同,那么 ASCII 码值大的那个串就更大;如果前面的字符都相同,但是一个串先结束了,那么长度短的串就更小。

串的连接也是常见的操作。

想象一下把两段绳子接在一起,就形成了一个更长的绳子。

串的连接也是类似的道理,把两个串首尾相连,形成一个新的串。

但在实际操作中,要注意存储空间的分配,确保有足够的空间来容纳连接后的串。

还有串的子串操作。

比如说,从一篇文章中截取一段文字,这就是获取一个子串。

在程序中,我们需要明确指定子串的起始位置和长度,才能准确地获取到所需的部分。

串的模式匹配更是一个重要的应用。

这就像是在一篇长篇小说中寻找特定的关键词或者短语。

最常见的模式匹配算法有朴素模式匹配算法和 KMP 算法。

朴素模式匹配算法比较直接,就是从主串的开头逐个字符与模式串进行匹配。

而 KMP 算法则通过对模式串进行预处理,利用已经匹配的部分信息,减少不必要的比较,从而提高匹配的效率。

数据结构串、数组和广义表知识点总结

数据结构串、数组和广义表知识点总结

数据结构串、数组和广义表知识点总结
数据结构是计算机科学中研究数据如何组织、存储、管理和操作的学科。

三个常见的数据结构串、数组和广义表都是用于存储和操作数据的。

1. 串:
- 串是由0个或多个字符组成的有限序列。

它是一维数组的特例。

- 串的操作包括插入、删除、修改和查找等常见操作。

- 串可以通过数组、链表或动态分配的内存来实现。

2. 数组:
- 数组是一种线性数据结构,它由一组连续的内存空间组成,
存储相同类型的数据。

- 数组的操作包括插入、删除、修改和查找等常见操作。

- 数组的访问时间复杂度为O(1),但插入和删除的时间复杂度
较高。

3. 广义表:
- 广义表是由若干元素组成的有序集合,每个元素可以是原子
或者是一个广义表。

- 广义表可以通过链表来实现,每个节点包含两个指针,一个
指向元素,一个指向下一个节点。

- 广义表的操作包括插入、删除、修改和查找等常见操作。

- 广义表可以表示任意层次的嵌套结构,具有灵活性和扩展性。

总结:
- 串、数组和广义表都是常见的数据结构,用于存储和操作数据。

- 串是字符的有限序列,可以通过数组或链表来实现。

- 数组是一维线性数据结构,存储相同类型的数据,具有常数时间复杂度的访问操作。

- 广义表是由元素组成的有序集合,可以通过链表来实现,能够表示任意层次的嵌套结构。

数据结构-4 串

数据结构-4 串

数据结构-4 串数据结构 4 串在计算机科学中,数据结构是组织和存储数据的方式,以便能够有效地进行操作和访问。

今天,咱们来聊聊数据结构中的“串”。

什么是串呢?简单来说,串就是由零个或多个字符组成的有限序列。

这就好比我们日常说的一句话、一篇文章中的一段文字,都是串的具体表现形式。

串在计算机中的应用非常广泛。

比如说,在文本编辑中,我们输入的每一行文字都可以看作是一个串;在网络通信中,传输的各种信息也常常以串的形式存在;在数据库中,存储的字符数据也可以理解为串。

为了更好地处理串,计算机科学家们设计了各种各样的操作和算法。

首先是串的存储结构。

常见的有两种:顺序存储和链式存储。

顺序存储就像是把一串字符一个挨着一个地放在连续的内存空间里。

这样的好处是可以快速地随机访问串中的任意字符,但缺点是在插入或删除字符时可能需要大量的移动操作。

链式存储则是通过节点把字符连接起来,每个节点存储一个字符以及指向下一个节点的指针。

这种方式在插入和删除操作时比较方便,但随机访问的效率相对较低。

接下来,咱们聊聊串的比较操作。

比较两个串是否相等是很常见的需求。

这可不是简单地看看两个串长得一不一样,还得考虑字符的顺序和数量。

常见的比较方法有逐个字符比较,从串的开头一个一个比下去,直到发现不同或者其中一个串结束。

再说说串的模式匹配。

这是一个很重要的操作,比如说要在一篇长文章中找到某个特定的关键词或者短语,这就用到了模式匹配算法。

其中,著名的有朴素模式匹配算法和 KMP 算法。

朴素模式匹配算法的思路很直接,就是从主串的开头开始,逐个与模式串进行匹配,如果匹配不成功就将模式串往后移动一位继续匹配。

这个算法简单易懂,但效率不是很高,特别是在主串和模式串长度较长时。

KMP 算法则通过对模式串的预处理,计算出一个 next 数组,利用这个数组可以在匹配不成功时更有效地移动模式串,从而提高匹配的效率。

除了上面说的这些,串还有很多其他的操作,比如串的连接、子串提取、串的替换等等。

数据结构第4章 串

数据结构第4章  串
ring s, SString t)
/*若串s和t相等则返回0;若s>t则返回正数;若s<t则返 回负数*/
{ int i;
for (i=0;i<s.len&&i<t.len;i++)
if (s.ch[i]!=t.ch[i]) return(s.ch[i] - t.ch[i]);
初 始 条 件 : 串 S 存 在 ,1≤pos≤StrLength(S) 且 1≤len≤StrLength(S)-pos+1
操作结果:用Sub返回串S的第pos个字符起长度为len的子串
返回主目录
(11)StrIndex(S,T,pos)
初始条件: 串S和T存在,T是非空串, 1≤pos≤StrLength(S)
return(s.len); }
返回主目录
(7)清空函数
StrClear(SString *s) /*将串s置为空串*/ {
s->len=0; }
返回主目录
(8)连接函数
(1) 连接后串长≤MAXLEN,则直接将B加在A的 后面。 (2) 连接后串长>MAXLEN且LA<MAXLEN,则B 会有部分字符被舍弃。 (3) 连接后串长>MAXLEN且LA=MAXLEN,则B 的全部字符被舍弃(不需连接)。
for (i=s->len + t.len-1;i>=t.len + pos;i--)
s->ch[i]=s->ch[i-t.len];
for (i=0;i<t.len;i++) s->ch[i+pos]=t.ch[i];
s->len=s->len+t.len;

数据结构(串)

数据结构(串)

数据结构(串)数据结构(串)1.介绍1.1 定义数据结构(串)是计算机科学中的一种基础数据结构,用于存储和操作一系列具有相同数据类型的元素的集合。

1.2 特性- 顺序存储:串中的元素按照在字符串中的顺序存储。

- 长度可变:可以动态改变串的长度。

- 计数方式:通常使用0开始计数。

1.3 应用字符串的数据结构广泛应用于文本处理、模式匹配、编译器设计等领域。

2.串的基本操作2.1 创建串:定义一个字符串变量并为其分配内存空间。

2.2 销毁串:释放字符串变量占用的内存空间。

2.3 清空串:将字符串中的元素清空,使字符串变为空串。

2.4 判断串是否为空:判断字符串是否为空串。

2.5 获取串的长度:获取字符串中元素的个数。

2.6 拷贝串:将一个串拷贝到另一个串中。

2.7 两个串:将两个串连接成一个新的串。

2.8 截取子串:从原串中截取一段子串。

2.9 查找子串:在串中查找指定子串的位置。

2.10 替换子串:在串中将指定子串替换成新的子串。

2.11 插入子串:在串中指定位置插入一个子串。

2.12 删除子串:从串中删除指定的子串。

3.串的存储结构3.1 顺序存储结构:使用一维数组存储字符串的字符元素。

3.2 链式存储结构:使用链表存储字符串的字符元素,每个节点存储一个字符。

4.串匹配算法4.1 暴力匹配算法:逐个比较字符串中的字符,若匹配失败则向后移动。

4.2 KMP算法:利用前缀函数预处理,避免重复比较已经匹配的字符。

4.3 Boyer-Moore算法:从匹配串的末尾开始比较,利用坏字符规则和好后缀规则跳过不必要的比较。

5.附件本文档不涉及附件。

6.法律名词及注释- 数据结构:指计算机科学中研究数据存储方式及其相关操作的学科。

- 串:也称为字符串,是由零个或多个字符组成的有序序列。

数据结构-4 串

数据结构-4 串

数据结构-4 串数据结构 4 串在计算机科学中,数据结构是组织和存储数据的方式,以便能够有效地进行操作和处理。

其中,串(String)是一种非常常见且重要的数据结构,它在众多的应用中都发挥着重要的作用。

串,简单来说,就是由零个或多个字符组成的有限序列。

我们日常生活中接触到的各种文本,比如一篇文章、一条短信、一个网页的标题等等,在计算机中都可以用串来表示。

串有其独特的特点。

首先,它具有有限长度。

这意味着串中包含的字符数量是有限的,不能无限增长。

其次,串中的字符通常来自某个特定的字符集,比如常见的ASCII 字符集或者Unicode 字符集。

再者,串中的字符是按照一定的顺序排列的,这个顺序是有意义且不可随意更改的。

为了在计算机中有效地存储和操作串,有多种不同的实现方式。

一种常见的方式是使用字符数组。

我们可以定义一个足够大的字符数组来存储串中的字符。

这种方式直观且简单,但在进行串的修改操作(如插入、删除)时,可能会比较麻烦,因为需要移动大量的字符来腾出空间或者填补空缺。

另一种方式是使用指针和动态分配内存。

通过动态分配内存,可以根据串的实际长度来灵活地分配所需的存储空间。

这样在处理长度变化较大的串时,效率会更高,但也需要注意内存的释放,以避免内存泄漏的问题。

在对串进行操作时,有许多常见的基本运算。

比如串的连接,就是将两个串拼接在一起形成一个新的串。

还有串的比较,判断两个串是否相等,或者哪个串在字典序上更大。

此外,还有子串的提取,从一个串中取出一部分连续的字符形成新的串。

串的应用场景十分广泛。

在文本编辑软件中,对输入的文本进行处理和存储就离不开串。

在数据库系统中,存储和检索字符串类型的数据也需要对串进行有效的管理。

在编程语言中,字符串的处理也是常见的操作,比如字符串的格式化输出、字符串的查找和替换等等。

举个例子,当我们在搜索引擎中输入关键词时,搜索引擎会将我们输入的关键词作为一个串,然后在其庞大的数据库中进行匹配和查找,找到与这个串相关的网页和信息。

数据结构 串

数据结构 串

1第4章串主要内容: 串的基本概念 串的定长顺序表示 串的堆分配存储表示 串的块链存储表示2串的概述串是一种常用于非数值处理的线性结构从数据结构角度看,串是一种线性表,其特殊之处在于其数据元素类型被限定为字符。

因此也可以称串是一种特殊的线性表。

从数据类型来看,串由字符构成,其操作特点和线性表大不相同,是完全不同的数据类型。

串通常以串的整体作为操作对象,因为串中的单个元素常常是无意义的。

而线性表的操作对象多以单个元素为操作对象串是元素类型被限制为字符的特殊线性表3§ 4.1 串的类型定义1. 串的基本概念串(String):是零个或多个字符组成的有限序列。

一般记作S= ‘a 1a 2a 3…a n ’,S 是串名,单引号括起来的字符序列是串值; a i (1≤i ≤n )可以是字母、数字或其它字符;i 是字符在序列中的序号,也称为该字符在串中的位置。

n 是串中所包含的字符个数,称为该串的长度。

引号不属于串。

两个串相等,当且仅当两个串值相等,即长度、位置相等。

4空串和空白串空串(Empty String):长度为零的串,不包含任何字符。

空白串(Blank String):空格也是串集合中的一个元素,通常将仅由一个或多个空格组成的串称为空白串。

注意:空串和空白串不同。

例如“”和“”分别表示长度为1的空白串和长度为0的空串。

为了清楚起见,用“φ”来表示空串5子串和主串子串:串中任意个连续字符组成的子序列称为该串的子串。

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

B 是A 的子串。

B 在A 中出现了两次,B 在A 中的序号(或位置)为3。

注意:空串是任意串的子串,任意串是其自身的子串子串的位置:通常将子串在主串中首次出现时,该子串首字符对应的主串中的序号,定义为子串在主串中的序号(或位置)。

例如:设A=“This is a string”,B=“is”。

问B 是A 的子串吗?如果是,B 在A 中出现了几次?其位置是几?62. 串的抽象数据定义ADT string {数据对象: D 数据关系: R 基本操作:StrAssign(&S,chars);StrCopy(&S,S1); StrEmpty(&S);StrCompare(S1,S2);StrLength(S); ClearString(&S);Concat(&S,S1,S2); SubString(&Sub,S,pos,len);Index(S,Sub,pos); Replace(&S,Sub,T); StrInsert(&S,pos,Sub); StrDelete(&S,pos,len);DestroyString(&S);}ADT String7§4.2 串的顺序表示和实现串的顺序存储:即用一组地址连续的存储单元存储串值中的字符序列非紧缩格式:一个存储单元中只存放一个字符,所需存储单元个数即是串的长度。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
if(pos>=0) { n=StrLength(S); m=StrLength(T); i=pos; while ( i<=n-m ) { SubString( sub,S,i,m );//返回S中从i起长度为m的子串 if( SubCompare (sub,T)!= 0 ) i++; else return i; } // while
StrCompare(S, T) : 若S>T 返回>0;若S=T 返回=0;若
S<T 返回<0;
StrLength( S ) :串S存在,返回S中元素的个数,称为串
的长度
more
串的基本操作
Concat( &T, S1,S2 ) : 用T返回S1和S2联接而成的新串 SubString( &Sub,S,pos,len ) : 用Sub返回串S的第pos个
▪ 两个串之间可以进行比较。 ▪ 称两个串相等,当且仅当这两个串的值相等,包括
两个串的长度相等,并且各个对应位置的字符都相 等。
▪ 当两个串不相等时,可按“字典顺序”分大小。令
s= “s0s1…sm-1” (m>0) t= “t0t1…tn-1” (n>0) ▪ 假设,两者最大有前k个子序列相等(最大相等前缀子
▪ 串中任意个连续的字符组成的子序列称为该串的子串。包含 子串的的串相应地称为主串。通常称字符在序列中的序列号 为该字符在串中的位置。子串在主串中的位置则以子串第0 个字符在主串的位置来表示。
4.1 串的定义和操作
▪ 例如:下面a,b,c,d都是串
▪ a=“BEI”
长度为3
▪ b=“JING”
长度为4
44
第4章 串
▪ 字符串数据是计算机非数值处理的主要对象之一。在早 期字符串字符串作为输入输出的常量出现,现已发展成 为字符串类型,可以进行一系列的操作。
▪ 字符串一般简称为串。在汇编和编译程序中,源程序是 字符串数据。在事务处理程序中,顾客的姓名和地址及 货物的名称、产地等也是字符串。此外,如信息检索系 统、文字编辑程序、自然语言翻译系统等都是以字符串 为处理对象。
串),s和t的大小由sk和tk的大小来决定。在C语言中字 符的大小按ASCII码的大小为准
4.1 串的定义和操作
▪ 串值必须用一对双引号括起来,但双引号不属于串, 它的作用只是为了避免与变量或常量混淆。例如:
▪ x = “123”;
▪ 其中,X是一个串变量名,赋给它的值是字符序列123, 而不是整数123。之间可以进行比较。
S = “a0a1…an-1” (n ≥ 0 ) ▪ 其中,S是串的名称,用双号括起来的字符序列是串的值;
ai (0≤i≤n-1)可以是字母、数字或其它字符(字符的序号从 0开始,与C、C++、JAVA等语言的习惯一致);串中字符 的数目n称为串的长度。零个字符的串称为空串(null string),它的长度为零。
} ADT String

4.1 串的定义和操作
▪ 对于串的基本操作集可以有不同的定义方法,各种 版本的C语言都定义了自己的串操作函数,使用时 应以语言参考为准。
▪ 在前面的基本操作中:串赋值(StrAssing)、串 比较(StrCompare)、求串长(StrLength)、串 联接(StrCompare)、求子串(SubString)等五
▪ 然而,目前的计算机硬件结构主要是面向数值计算的需 要,基本上没有提供处理字符串数据操作的指令,需要 用软件来实现字符串类型。由于各种应用具有不同的特 点,要有效的实现字处理,必须根据具体情况使用合适 的存储结构。
4.1 串的定义和操作
▪ 串(String),或称字符串是由零个或多个字符组成的有限序 列。一般记为:
数 据 结 构(Data Structure )
第四章 串(String)
主讲:李耀国
第4章 串
▪ 4.1 串的定义和操作 ▪ 4.2 串的表示和实现
▪ 4.2.1 定长顺序存储表示 ▪ 4.2.2 堆分配存储表示 ▪ 4.2.3 块链存储表示
▪ 4.3 正文模式匹配** ▪ 4.4 正文编辑-串操作应用举例
字符起长度为len的子串 Index( S, T, pos ) : 如果在主串S中存在和串T值相同的
子串,则返回它在主串S中第pos个字符之后第一次出现 的位置,否则返回0 Replace( &S,T,V ) : 用V替换主串S中出现的所有与T相等 的不重叠的子串 StrInsert( &S,pos,T ) : 在串S的第pos个字符之前插入串 T StrDelete( &S,pos,len ) : 在串S中删除第pos个字符起长 度为len的子串 DestroyString( &S ) : 串S被摧毁
串的基本操作(1)
ADT String{
数据对象: D={ai| ai∈CharacterSet,i=1,2,...,n,n≥0} 数据关系: R1={<ai-1, ai> | ai-1,ai∈D,i=2,...,n} 基本操作:
StrAssing( &T, chars ) : chars是字符串常量,生成一个 值等于chars的串T StrCopy( &T, S ) :串S存在,由串S复制得串T StrEmpty( S ) :如果串S为空,返回TRUE,否则返回 FALSE
▪ aString=“aString”;
▪ 左边的aString是一个串变量名,而右边的字符序列 aString是赋给它的值
▪ 在各种应用中,空格通常是串的字符集合中的一个
元素,可以出现在其它字符之间,由一个或多个空
格组成的串称为空格串
▪ “ ”; 和 “
”;都是空格串。
为了清楚起见我们以后用Φ来表示空串
▪ c=“BEIJING”
长度为7
▪ d=“BEI JING”
长度为8
▪ 串的逻辑结构和线性表极为相似,区别仅仅在于串 的数据对象约束为字符集。但是串的基本操作和线 性表有很大的差别。
▪ 在线性表的操作中大多数以“单个元素”为操作对 象,而在串的操作中大多数以“串的整体”为操作 对象。
4.1 串的定义和操作
种操作构成串类型的最小操作子集。其他操作可由 这些最小操作子集来实现。
▪ 例如可用串比较、求串长和求子串等操作实现定位
函数(Index)
4.1 串的定义和操作
▪ 算法4.1(用最小操作子集来实现定位函数(Index) int Index( String S, String T, int pos ) {//T非空、如果主串S中pos之后存在与T相等的子串, //则返回第一个这样的子串在S中的位置,否则返回-1
相关文档
最新文档