当前位置:首页 » 服务存储 » 串可以进行顺序存储
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

串可以进行顺序存储

发布时间: 2023-03-13 17:56:53

Ⅰ C++语言中提供有关串的类

第四章:串(包括习题与答案及要点)

本章介绍了串的逻辑结构,存储结构及串上的基本运算,由于在高级语言中已经提供了较全善的串处理功能,因此本章的重点是掌握在串上实现的模式匹配算法。同时这也是本章的难点。但是从全书来讲,这属于较简单的一章内容。

--------------------------------------------------------------------------------

1.串及其运算(领会)(这些内容比较容易理解,不用死记)

串就是字符串,是一种特殊的线性表,它的每个结点仅由一个字符组成。

空串:是指长度为零的串,也就是串中不包含任何字符(结点)。

空白串:指串中包含一个或多个空格字符的串。不同与空串,它的结点就是一个空格字符。

在一个串中任意个连续字符组成的子序列称为该串的子串,包含子串的串就称为主串。子串在主串中的序号就是指子串在主串中首次出现的位置。如A="I love you" B="love",则B在A中的序号为3,注意空格也是字符。

空串是任意串的子串,任意串是他自身的子串?

串分为两种:串常量和串变量。串常量在程序中不能改变,串变量则可以。

关于串的基本运算,基本上在C语言中已经学过,主要有

求串长strlen(char *s)、

串复制strcpy(char *to,char *from)、

串联接strcat(char *to,char *from)、

串比较charcmp(char *s1,char *s2)

和字符定位strchr(char *s, char c)等

这些基本运算通过练习来掌握。

--------------------------------------------------------------------------------

2.串的存储结构(简单应用)

串是特殊的线性表(结点是字符),所以串的存储结构与线性表的存储结构类似。

串的顺序存储结构简称为顺序串,顺序串又可按存储分配的不同分为静态存储分配的顺序串和动态存储分配的顺序串。

静态的意思可简单地理解为一个确定的存储空间,它的长度是不可变的。如直接使用定长的字符数组来定义一个串。它的优点是涉及串长的操作速度快,因为它的最大长度是不变的。

动态存储分配就是在定义串时不分配存储空间,直到需要使用时按所需串的长度分配存储单元给它,并且在运行中还可以根据需要变化串的长度,这就是动态分配。不过这样的串仍是顺序存储的,也就是说指针指向串的首地址,后面的结点是连续存储的。

串的链式存储就是用单链表的方式存储串值,串的这种链式存储结构简称为链串。链串与单链表的差异只是它的结点数据域为单个字符。这种存储结构方便于串的插入和删除操作,但是空间利用率不高,因为存放每一个字符要"搭配"一个指向下一字符的地址,而地址所占空间是比较大的。为了解决这种"存储密度"过低的状况,可以让一个结点存储多个字符,事实上这是顺序串和链串的综合(折衷)。

--------------------------------------------------------------------------------

本章的重点和难点就是串运算的实现,特别是顺序串上子串定位的运算。

子串定位运算又称串的"模式匹配"或"串匹配",就是在主串中查找出子串出现的位置,这在应用中非常广泛,比如文本编辑中的"查找和替换"用到的就是子串定位运算的算法。

在串匹配中,将主串称为目标(串),子串称为模式(串),我们这样想象,子串就如同一个模板(样本),用它在目标上对比,从头往后比较,凡是遇到一模一样的那么一段,就算找到一个位置了(我们就说,从这个位置开始的匹配成功)。用很专业的很酷的话说就是"模式在目标中出现"(我想起了警匪片里的对话),如果这个模板对应的目标串中有不一样的字符出现,那么这个位置就匹配失败。

当我们用这个模子依次从目标的头部往后移,移动到的位置就叫位移,如果每次向右移动1格,那么每次的位移就加上1。

每次移动后要看看模板里的字符和目标中相应的字符是否相等,如果都相同,这次位移就叫有效位移(其实就是从这个位置开始的匹配成功)

另外有一个合法位移和不合法位移的概念,就是说,移动一个位置后,如果模板的最后一个字符还没有超出目标串中最后一个字符时,这个位移就是合法位移,如果超出了,那么就没有比较的意义了,这时就是不合法位移。

这是比较容易理解的,串匹配问题就是找出给定模式串P在给定目标串T中首次出现的有效位移或者是全部有效位移。

具体的串匹配算法也不是很难理解,就是用两个循环,外循环用于进行模式的位移,内循环进行模板内每个字符的比较(判断是否有效位移)。关于串匹配的时间复杂度,在最坏的情况下就是目标串和模式串分别是"a^n-1b"和"a^m-1b"的形式,就是说,每一次合法位移后,在内循环中都要比较m个字符才知道是不是有效位移(前面的字符都是一样的)。所以最坏的情况下时间复杂度是O((n-m+1)m),假如m与n同阶的话则它是O(n^2)。

链串上的子串定位运算的不同之处就是位移是结点地址而不是整数。理解一下算法即可。

真正的应用主要还是要掌握串的基本算法并用它们构造出可以解决具体问题的简单算法。

第四章 串 复习要点

本章复习要点是:

串是一种特殊的线性表,它的结点仅由一个字符组成。

空串与空白串的区别:空串是长度为零的串,空白串是指由一个或多个空格组成的串。

串运算的实现中子串定位运算又称串的模式匹配或串匹配。

串匹配中,一般将主串称为目标(串),子串称为模式(串)。

本章可能出的题型多半为选择、填空等。

Ⅱ 字符串通常采用的两种存储方式是什么

字符串的两种最基本的存储方式是顺序存储方式和链接存储方式,选第三个啦

Ⅲ 顺序存储方式串的基本操作是什么

1.串联结concat串联结concat函数是用T返回由S1和S2联结而成的新串。由于串长固定,因此超过串长的串值必须舍去,称为“截断”。假设S1、S2和T都是SString型的串变量,且串T是由串S1联结得到的,即串T的值的前一段和串S1的值相等,串T的值的后一段和串S2的值相等,则只要进行相应的“串值复制”操作即可,只是需要约定,对超长部分实施“截断”操作。基于串S1和S2长度的不同情况,串T值的产生可能有2种情况:①S1[0]+S2[0]≤MAXSTRLEN时,得到串T的正确结果;②S1[0]<MAXSTRLEN,而S1[0]+S2[0]>MAXSTRLEN时,则将串S2的一部分截断,得到的串T只包含S2的一个子串;③S1[0]=MAXSTRLEN时,则得到的串T并非联结结果,而和串S1相等。在这里仅考虑能正确联结的情况,即S1[0]+S2[0]<MAXSTRLEN,

Ⅳ 请问一下,数据结构中串的顺序存储和链接存储要怎么实现啊

顺序存储的实现方法:使用数组

链接存储的实现方法:使用指针

Ⅳ 下面关于串的的叙述中,哪一个是不正确的

下面关于串的的叙述中哪一个是不正确的
A串是字符的有限序列
B空串是由空格构成的串
C模式匹配是串的一种重要运算
D串既可以采用顺序存储也可以采用链式存储

答案B