第4章 串

一.串

1.字符串一般简称为串。串的历史悠久,汇编语言编译程序中,源程序和目标程序都是字符串数据。串不容易处理,因为计算机硬件结构为浮点运算设计。所以需要为串设计合适的数据结构。

2.子串是主串中任意连续的字符序列。判断两个字符串相等的条件是长度相等且每个字符相等。空格串和空串不是一回事。

 

二.串的存储结构

    串的逻辑结构和线性表相似,区别在于其一对串进行的操作是线性表的一个子集,其二串的操作对象通常是一个子序列,而不是某一个字符。串一般有三种实现:

1.定长顺序存储:可以用定长数组存储,0号位存储串的长度,1-n号位存储对应的字符,也可以像C语言那样,用一个字符('/0')作为结束标志。定长

   顺序存储的缺点是不够灵活,如当超出长度时,只能截取超出部分。

2.堆分配存储:堆分配需要2个变量,一是字符串入口指针,二是字符串长度。堆分配比起定长顺序存储更灵活且不失前者优点,所以常常使用。

3.链式存储,每个节点可以存一个或者多个字符,另外如同任何链式结构一样,需要额外的指向下一个节点的指针。链式结构较前二者使用较少。

 

三.串的模式匹配算法

   除了Brute Force的算法外,由D.E.Knuth、V.R.Pratt、J.H.Morris三人同时发现的KMP(三人名字缩写)算法应用较为广泛。KMP算法与Brute Force算法最大的区别在于:当产生失配时,指针i不动,指针j退回到next[j]所指的位置重新进行匹配,只有当j退回至0时,i和j同时增一。这样就保证了主串指针i从不倒回。Brute Force的时间复杂度为O(n*m),其中n为主串长度,m为模式串长度,一般情况下其表现为O(n+m),所以仍被广泛使用。KMP可以在O(n+m)的数量级上完成匹配,但只有在模式串与主串的部分匹配情况比较明显时才比Brute Force快的多。

 

四.串的具体应用

    文本编辑和词的索引表都是串的具体应用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值