大话数据结构--初始串

241 阅读3分钟

「这是我参与11月更文挑战的第15天,活动详情查看:2021最后一次更文挑战」。

前言

废话不多,数据结构必须学! 每天更新一章,一篇写不完的话会分成两篇来写~

五、串

5.1串的定义

串string)是由零个或多个字符组成的有限序列,又名叫字符串。

一般记为s = "a1a2a3a4......an"(n>0),其中,s是串的名称,用双引号括起来的字符序列是串的值,单引号不属于串的内容

串中的字符数目n称为串的长度,零个字符的串称为空串,可以用“”表示也可以用空集表示

5.2串的比较

两个数字其实很好比较,但是字符串之间是如何进行比较的呢?

比如:“silly” 和“stupid”它俩谁大?

第一个字母都是s,我们认为大小不存在差异,而第二个字母,i比t更靠前,所以我们说:“silly” > "stupid"

事实上串的比较是通过组成串的字符之间的编码来进行的,而字符的编码指的是字符在对应字符集的序号

计算机中常用字符是使用标准ASCII编码,更准确一点,由7位二进制数表示一个字符,共可以表示128个字符,后来不够用了扩展ASCII码由8位二进制数表示一个字符,共可以表示256个字符,已经足够满足以英语为主的语言和特殊符号进行输入、存储、输出等操作的字符需要了。

显然这256个字符是不够的,因此后来就有了Unicode 编码,比较常用的是由16位的二进制数表示-一个字符,这样总共就可以表示216个字符,约是65万多个字符,足够表示世界上所有语言的所有字符了。当然,为了和ASCII码兼容Unicode的前256个字符与ASCII码完全相同。

5.3串的抽象数据类型

对于串的基本操作与线性表是有很大差别的。线性表更关注的是单个元素的操作,比如查找一个元素,插入或删除一个元素,但串中更多的是查找子串位置、得到指定位置子串、替换子串等操作。

 ADT 串(string)
 Data
     串中元素仅由一个字符组成,相邻元素具有前驱和后继关系。
 Operation
     StrAssign (T,*chars) :生成一个其值等于字符串常量chars的串T。
     StrCopy(T,s):串S存在,由串S复制得串T。
     ClearString(s) :串S存在,将串清空。
     StringEmpty(s) :若串S为空,返回true,否则返回false。
     StrLength(s) :返回串S的元素个数,即串的长度。
     StrCompare (S,T) :若S>T,返回值>0,若S=T,返回0,若S<T,返回值<0。
     Concat (T,S1,S2) :用T返回由S1和S2联接而成的新串。
     SubString (Sub,s,pos,len) :串S存在,1≤pos≤StrLength(s),
                                 且0len≤StrLength (S) -pos+1,用Sub返
                                 回串S的第pos个字符起长度为len的子串。
     Index (S,T,pos) :串S和T存在,T是非空串,1≤pos≤StrLength(s)。
                     若主串S中存在和串T值相同的子串,则返回它在主串S中
                     第pos个字符之后第一次出现的位置,否则返回0。
     Replace (s,T,v):串S、T和V存在,T是非空串。用V替换主串s中出现的所有
                      与T相等的不重叠的子串。
     StrInsert (s,pos,t) :串S和T存在,1≤pos≤StrLength(s) +1。
                          在串S的第pos个字符之前插入串T。
     StrDelete (S,pos,len) :串S存在,1≤pos≤StrLength (s) -len+1。
                          从串S中删除第pos个字符起长度为len的子串。
 endADT

下一节我们来介绍串的存储结构和一些常见的模式匹配算法