(03)串的定长顺序存储结构

合集下载

数据结构串串的基本概念串的存储结构与实现串的模式匹配

数据结构串串的基本概念串的存储结构与实现串的模式匹配
t.ch[i]=s1.ch[i]; for(i=s1.length;i<t.length;i++)
t.ch[i]=s2.ch[i-s1.length]; }
串删除
void strdelete(Hstring &s,int pos,int len) {
if(pos<1||pos>s.length-len+1||len<0||len>s.length){ cout<<"删除位置不合法"<<endl; return;
int flag=0; int i=0,j=1; if(s1[0]+s2[0]<=MAXSTRLEN) {
for(i=1;i<=s1[0];i++) t[i]=s1[i];
for(i=s1[0]+1;i<=s1[0]+s2[0];i++) t[i]=s2[j++];
t[0]=s1[0]+s2[0]; flag=1; //未截断 }
strempty(s) 初始条件:s为一个串 操作结果:若s为空串,则返回1
strcopy(&t,s) 初始条件:s为一个串 操作结果:把串s复制给t
strncpy(&sub,s,pos,len) 初始条件:s为一个串,pos为起始位置, 1≤pos≤strlength(s)-1,len≥0 操作结果:用sub返回串s的第pos个字符开⑩长度为len的子串
例:模式串t=“abcac”和主串s=“ababcabcaccabbc”匹配过程
第三二一 趟 a b a b c a b c a c c a b b c i=112734568901

串的定义及其基本运算

串的定义及其基本运算

4.2串的定长顺序存储及基本运算
4.2.1存储结构的实现
#define MAXSIZE 256 第一种: typedef struct {char data[MAXSIZE]; int curlen; }SeqString;
0 s.data a 第二种: b c d e f g h i 1 2 3 4 5 6 7 8
j=1 j=3 j=2 j=4
i=2 i=4 i=3 i=5
j 模式串 next[j]
i=5
1 2
0 1
3
1
4
1
5
2
6
2
7
3
8
2
9
3
a b c a a b a b c
s: a a b c b a b c a a b c a a b a b c t: abcaababc
j=1 i=6 i=7i=8 i=10 i=12 i=9 i=11 i=10 i=12
MAXSIZE
4.2.2运算实现(采用第二种表示串长的方式) int StrLength(char s[]) 1. 求串的长度 StrLength(s); {int len=0;
while(s[len]!=‘\0’)len++; return len; }
2.串赋值 void StrAssign(s1,s2) StrAssign(s1,s2); char s1[ ], s2[ ] ;
j=3 j=5 j=7 j=9 j=4 j=6 j=8 j=10
(3)KMP算法实现 循环条件? 什么时候回溯? 回溯时i、j如何计算? 如何判断匹配是否成功? 匹配成功时,返回的起始位置如何计算?
见P61的算法4-5

串的定义和基本运算(精)

串的定义和基本运算(精)
s1->str=(char*)malloc(sizoef(char));s1->str[0]=’\0’;s1>length=0;return ERROR;} s1->str=(char*)malloc((len+1)*sizeof(char)); if (!s1.str) return ERROR; s1->str[0..len-1]=s2.str[start-1..start+len -2]; s1->str[len]=’\0’; s1->length=len; return OK; }
int length;
}STRING; 不同的定义形式,算法中的处理也略有不同。下 面我们将给出在第二种顺序存储方式下串的几个基本 操作的算法。
(1) 串的赋值 int StringAssign(STRING*s,char *string_constant) { if (s->str) free(s->str);
2. 链式存储结构
由于串结构中每个数据元素为一个字符,所以最 直接的链式存储结构是每个结点的数据域存放一个字 符。举例:
S
s
t r i n g^
图 4-1
优点是操作方便;不足ቤተ መጻሕፍቲ ባይዱ处是存储密度较低。所 谓存储密度为:
串值所占的存储单元 存储密度
实际分配的存储密度
若要将多个字符存放在一个结点中,就可以缓解 这个问题。举例:
(4)串连接 int Concat(STRING *s1,STRING s2) { STRING s; StringAssign(&s,s1->str); //将s1原来的内容保留在s中 len=Length(s1)+Length(s2);

数据结构答案 第5章 串学习指导

数据结构答案 第5章 串学习指导

第5章串5.1 知识点分析1.串的定义串(String)是由零个或多个任意字符组成的有限序列。

一般记作:s="a1 a2 …a i…a n"。

其中s 是串名,用双引号括起来的字符序列为串值,但引号本身并不属于串的内容。

a i(1<=i<=n)是一个任意字符,它称为串的元素,是构成串的基本单位,i是它在整个串中的序号;n为串的长度,表示串中所包含的字符个数。

2.几个术语(1)长度串中字符的个数,称为串的长度。

(2)空串长度为零的字符串称为空串。

(3)空格串由一个或多个连续空格组成的串称为空格串。

(4)串相等两个串相等,是指两个串的长度相等,且每个对应字符都相等。

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

(6)主串包含子串的串称为该子串的主串。

(7)模式匹配子串的定位运算又称为串的模式匹配,是一种求子串的第一个字符在主串中序号的运算。

被匹配的主串称为目标串,子串称为模式。

3.串的基本运算(1)求串长:LenStr(s)。

(2)串连接:ConcatStr(s1,s2) 。

(3)求子串:SubStr (s,i,len)。

(4)串比较:EqualStr (s1,s2)。

(5)子串查找:IndexStr (s,t),找子串t在主串s中首次出现的位置(也称模式匹配)。

(6)串插入:InsStr (s,t,i)。

(7)串删除:DelStr(s,i,len)。

4.串的存储(1)定长顺序存储。

(2)链接存储。

(3)串的堆分配存储。

5.2 典型习题分析【例1】下面关于串的的叙述中,哪一个是不正确的?()A.串是字符的有限序列B.空串是由空格构成的串C.模式匹配是串的一种重要运算D.串既可以采用顺序存储,也可以采用链式存储分析:空串是不含任何字符的串,即空串的长度是零。

空格串是由空格组成的串,其长度等于空格的个数。

答案为B。

【例2】两个串相等的充分必要条件是( )。

A.两个串长度相等B.两个串有相同字符C.两个串长度相等且有相同字符D.以上结论均不正确分析:根据串相等定义,两个串是相等是指两个串的长度相等且对应字符都相等,故A、B、C均不正确,答案为D。

第4章 字符串v

第4章 字符串v

空串: 空串: 长度为0的字符串 的字符串; 长度为 的字符串; 空格串: 空格串: 由空格字符组成的字符串,长度>1 由空格字符组成的字符串,长度 主串: 主串: 包含该子串的字符串; 包含该子串的字符串; 字符的位置: 字符的位置: 从1开始 开始 子串的位置: 子串的位置: 该子串第一个字符的位置
定长顺序存储标识串的实际长度时可有三种方式: 定长顺序存储标识串的实际长度时可有三种方式:
(1)用一个指针指向最后一个字符,串描述类似顺序表 用一个指针指向最后一个字符, 用一个指针指向最后一个字符 #define MAXSIZE 256 typedef struct { char data[MAXSIZE]; int curlen; }SeqString; 定义一个串变量:SeqString s; 定义一个串变量
1.串的 定长 顺序存储 串的(定长 串的 定长)顺序存储
(定长 顺序存储结构类似于C语言的字符数组,以一 定长)顺序存储结构类似于 语言的字符数组, 定长 顺序存储结构类似于 语言的字符数组 组地址连续的存储单元存放串值中的字符序列, 组地址连续的存储单元存放串值中的字符序列,定长即是预 先为每一个串变量分配一个固定长度的存储区,例如: 先为每一个串变量分配一个固定长度的存储区,例如: #define MAXSIZE 256 char s[MAXSIZE] 那么,串的最大长度就不能超过 那么,串的最大长度就不能超过256。 。
第4章 串 章
4.1 字符串的基本概念
4. 2 串的存储结构
4.3 模式匹配
(1) 串的基本概念
串(string)是由零个或多个任意字符组成的字符序列, )是由零个或多个任意字符组成的字符序列, 又称为字符串( 又称为字符串(character string),一般记为: ) 一般记为: s=〝a1 a2 a3 … an〞

串的知识点总结

串的知识点总结

串的知识点总结1. 串的基本概念串是由零个或多个字符组成的有限序列,通常用来表示文本数据。

在编程语言中,串通常被定义为一个字符数组或字符串变量。

例如,在C语言中,字符串通常被定义为char类型的数组,而在Java语言中,字符串则是一个类对象。

2. 串的存储结构串的存储结构有两种常见形式:一是定长顺序存储结构,二是链式存储结构。

定长顺序存储结构是将串的字符按照顺序存储在一块连续的存储空间中,这种方式可以通过下标来访问任意位置的字符,但是需要预先分配足够的存储空间。

链式存储结构则是使用链表来存储串的字符,这种方式可以动态分配内存空间,但是访问任意位置的字符需要从链表头开始遍历,效率较低。

3. 串的基本操作串的基本操作包括串的创建、复制、连接、比较、插入和删除等。

创建串是指将一组字符转换成串的操作;复制是指将一个串的内容复制到另一个串中;连接是指将两个串连接在一起形成一个新的串;比较是指比较两个串的大小关系;插入是指在一个串中的指定位置插入一个子串;删除是指删除一个串中的指定子串。

这些操作都是串的基本操作,它们在实际应用中有着重要的作用。

4. 串的模式匹配串的模式匹配是指在一个主串中查找与给定模式串相匹配的子串的过程。

常见的模式匹配算法有暴力匹配算法、KMP算法和Boyer-Moore算法等。

暴力匹配算法是最简单的模式匹配算法,它的时间复杂度为O(m*n),其中m为主串长度,n为模式串长度;KMP算法是一种高效的模式匹配算法,它的时间复杂度为O(m+n),其中m为主串长度,n为模式串长度;Boyer-Moore算法是一种更加高效的模式匹配算法,它的时间复杂度为O(m*n),其中m为主串长度,n为模式串长度。

5. 串的应用串在计算机科学中有着广泛的应用,它在各种应用中都有着重要的作用。

例如,在文本编辑器中,串被用来表示文本文件的内容;在数据库系统中,串被用来表示数据的各种属性;在网络通信中,串被用来表示网页的URL地址等。

串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版

串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版

串-第4章-《数据结构题集》答案解析-严蔚敏吴伟民版习题集解析部分第4章串——《数据结构题集》-严蔚敏.吴伟民版源码使⽤说明链接☛☛☛课本源码合辑链接☛☛☛习题集全解析链接☛☛☛相关测试数据下载链接☛本习题⽂档的存放⽬录:数据结构\▼配套习题解析\▼04 串⽂档中源码的存放⽬录:数据结构\▼配套习题解析\▼04 串\▼习题测试⽂档-04源码测试数据存放⽬录:数据结构\▼配套习题解析\▼04 串\▼习题测试⽂档-04\Data⼀、基础知识题4.1❶简述空串和空格串(或称空格符串)的区别。

4.2❷对于教科书4.1节中所述串的各个基本操作,讨论是否可由其他基本操作构造⽽得,如何构造?4.3❶设s = ‘I AM A STUDENT’,t = ‘GOOD’,q = ‘WORKER’。

求:StrLength(s),StrLength(t),SubString(s, 8, 7),SubString(t, 2, 1),Index(s, ‘A’),Index(s, t),Replace(s, ‘STUDENT’, q),Concat(SubString(s, 6, 2), Concat(t, SubString(s, 7, 8)))。

4.4❶已知下列字符串a = ‘THIS’, f = ‘A SAMPLE’, c = ‘GOOD’, d = ‘NE’,b = ‘ ’.s = Concat(a, Concat(SubString(f, 2, 7), Concat(b, SubString(a, 3, 2)))),t = Replace(f, SubString(f, 3, 6), c),u = Concat(SubString(c, 3, 1), d),g = ‘IS’,v = Concat(s, Concat(b, Concat(t, Concat(b, u)))),试问:s,t,v,StrLength(s),Index(v, g),Index(u, g)各是什么?4.5❶试问执⾏以下函数会产⽣怎样的输出结果?void demonstrate(){StrAssign(s, ‘THIS IS A BOOK’);Replace(s, SubString(s, 3, 7), ‘ESE ARE’);StrAssign(t, Concat(s, ‘S’));StrAssign(u, ‘XYXYXYXYXYXY’);StrAssign(v, SubString(u, 6, 3));StrAssign(w, ‘W’);printf(‘t=’, t, ‘v=’, v, ‘u=’, Replace(u, v, w));}//demonstrate4.6❷已知:s = ‘(XYZ)+*’,t = ‘(X+Z)*Y’。

串的顺序存储结构

串的顺序存储结构

串的顺序存储结构串是由零个或多个字符组成的有限序列,是一种特殊的线性表。

在计算机中,字符串的存储可以使用顺序存储结构来实现。

顺序存储结构是将数据元素存放在一块连续的存储空间中,通过元素在内存中的物理地址来表示元素之间的关系。

对于串的顺序存储结构来说,就是将串中的字符按照顺序存放在一块连续的存储空间中。

在串的顺序存储结构中,通常使用一个字符数组来存储串的字符,同时需要记录串的长度。

数组中的每个元素都对应着串中的一个字符,通过下标可以直接访问和操作对应的字符。

由于顺序存储结构中的元素是连续存储的,所以可以实现快速的查找和修改操作。

在实际应用中,串的顺序存储结构常用于处理字符串的操作。

例如,在字符串匹配算法中,需要对两个字符串进行比较,通过顺序存储结构可以方便地获取和比较字符,从而判断两个字符串是否相等或者是否包含某个子串。

在字符串的操作中,还可以使用顺序存储结构来实现插入、删除和替换等操作。

通过将插入或删除的字符后面的字符依次向后或向前移动,可以实现字符串的动态修改。

顺序存储结构对于串的访问操作也是十分方便的。

通过下标可以直接访问和操作对应的字符,可以快速地获取字符串中的某个字符,也可以通过循环遍历整个串来进行特定操作,如统计字符出现的次数、查找子串的位置等。

但是,顺序存储结构也存在一些限制和问题。

首先,由于顺序存储结构需要预先分配一定大小的存储空间,所以对于长度不确定的串来说,需要事先估计好串的最大长度,以避免空间浪费或者内存溢出的问题。

由于顺序存储结构中的元素是连续存储的,所以在插入和删除操作时,需要移动大量的元素,时间复杂度较高。

这就导致了在实际应用中,对于频繁进行插入和删除操作的串来说,顺序存储结构并不适合。

顺序存储结构也无法灵活地改变串的长度。

当需要插入或删除大量字符时,可能需要重新分配更大或更小的存储空间,并将原有的字符复制到新的存储空间中。

串的顺序存储结构是一种常见的字符串存储方式,适用于对字符串进行查找、修改和访问等操作。

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