数据结构0423
2018-04-26 17:42 SummerVan 阅读(213) 评论(0) 收藏 举报串的定义
串是由零个或多个字符组成的有限序列,又名叫字符串,一般记为s=“a1a2·····an(n>=0)”
s是串的名字,引号里括起来的字符序列是串的值,引号不属于串的内容,字符数目n为串的长度,n是一个有限的数值,零个字符的串称为空串,长度为0用“”表示也可以用希腊字母Φ(读faì)表示.
注意事项:1空格串是只包含空格的串,并不是空串,空格串是有内容长度的,2串中任意个数的连续字符组成的子序列称为该串的子串,包含子串的称为主串,子串再主串中的位置就是子串的第一个字符在主串中的序号
串的比较
串的比较是通过组成串的字符之间的编码(指的是字符在对应字符集中的序号)来进行
字符编码发展:最开始由7位二进制数表示一个字符,一共可以表达128个字符(ASCLL编码),后来扩展ASCLL编码改为由8位二进制数表示一个字符,总共可以表示256个,再到后来变为16位的二进制数表示一个字符,这样就可以表示2^16个字符(Unicode),为了和ASCLL兼容,Uincode的前256个字符与ASCLL码相同
在C语言中,如果两个串的长度以及他们各个对应位置的字符都相等时,才算相等。给定串s=“a1a2·····an”,t=“b1b2····bm”,当且仅当n=m,并且a1=b1,a2=b2;····an=bm时,s=t。
对于不相等的两个串判定大小的方法,以上面2个串为例当满足下列条件之一时,s<t:
1.n<m 且ai=bi(i=1,2·····n) 例如s=“hap” t=“happy”
2.存在某个k<=min(m,n),使得ai=bi(i=1,2····k-1),ak<bk,例如s=“happen” t=“happy”第5个字母(k值),e的ascll码是101,y是121 e<y,所以s<t
总结:先比第一位如果大就大,依次类推 再比长度(类似查找单词的过程)
串的抽象数据类型
串中的元素都是字符哪怕串里的元素是“123”或者“2018-4-23”,只能理解成长度为3和长度为9的字符串,所以对于串的基本操作和线性表有差别,线性表更关注单个元素的操作,但串中更多的是查找子串位置,得到指定位置子串,替换子串等操作。(不同的高级语言会对串的基本操作有不同的定义方法,需要先查看它的参考手册关于字符串的基本操作有哪些)
串的存储结构
串的顺序存储结构:是用一组地址连续的存储单元来存储串中的字符序列,一般用定长数组定义。(因为对字符串的操作比如插入替换可能使得串序列的长度超过数组长度)
串的链式存储结构
与线性表相似,但在串里每一个数据元素是一个字符,如果也简单的应用链表存储串值,一个结点对应一个字符会浪费存储空间,所以一个结点可以存放一个或者多个字符,若最后一个结点未被占满用#等其他非串值字符补全(一个结点寸多少字符需要根据实际情况调节)
浙公网安备 33010602011771号