串和数组——数据结构与算法 总结4

1. 字符串

串是由零个或多个字符组成的有限序列。

串的基本运算:

   StrAssign(cstr):由字符串常量cstr创建一个串,即生成其值等于cstr的串。

   StrCopy():串复制,返回由当前串复制产生一个串。

   getsize():求串长,返回当前串中字符个数。

   geti(i):返回序号i的字符。

   seti(i, x):设置序号i的字符为x

   Concat(t):串连接,返回一个当前串和串t连接后的结果。

   SubStr(i, j):求子串,返回当前串中从第i个字符开始的j个连续字符组成的子串。

   InsStr(i, t):串插入,返回串t插入到当前串的第i个位置后的子串。

   DelStr(i, j):串删除,返回当前串中删去从第i个字符开始的j个字符后的结果。

   RepStr(i, j, t):串替换,返回用串t替换当前串中第i个字符开始的j个字符后的结果。

   DispStr():输出字符串。

串的模式匹配——KMP算法:

KMP算法:解决从一个主串中快速找出一个子串的问题,消除了目标串指针的回溯,使算法效率提升。主串叫目标串,子串叫模式串

研究模式串就可以找出其与任意主串匹配的部分匹配值。

每个位置的部分匹配值存储在next数组中

next[0]默认为-1next[j]的值就等于j位置前面字符串中最大公共前后缀的长度

next数组的用法:当模式串的j位置与主串的i位置不匹配时,令模式串的next[j]位置与主串的i位置继续匹配。

推荐视频  【天勤考研】KMP算法易懂版_哔哩哔哩_bilibili

原理如下图:

例题如下图(通过模式串写出对应的next[j]):

练习的例题:

例一:

例二:

2. 数组

数组通常采用顺序存储的方式来实现。

一维数组:

一维数组的所有元素依逻辑次序存放在一片连续的内存存储单元中。

一维数组的存储:其起始地址为第一个元素a0的地址即LOC(a0)。假设每个数据元素占用k个存储单元。则任一数据元素ai的存储地址LOC(ai)就可由公式求出:LOC(a_i) = LOC(a_0) + i \times k

多维数组:

  1. 数组(主要是二维)在以行序和列序优先的存储中的地址计算方法
  2. 特殊(对称、三角、对角)矩阵在压缩存储时的下标变换公式

多维数组(主要是二维)在以行序和列序优先的存储中的地址计算方法

注意行列是从0还是1开始

(1) 按行优先(row major order)存储

假设每个元素占k个存储单元,LOC(a0,0)表示a0,0元素的存储地址。对于元素ai,j

  • ai,j前面有0i-1i行,每行n个元素,共有i×n个元素。
  • 在第i行中前面有a[i,0..j-1],共j个元素。
  • 合起来,ai,j前面有i×n+j(整行数×每行元素个数 + 本行中aij前面的元素个数)个元素。
  • LOC(a_{i, j}) = LOC(a_{0, 0}) + (i \times n + j) \times k

(2) 按列优先(column major order)存储

假设每个元素占k个存储单元,LOC(a0,0)表示a0,0元素的存储地址。对于元素ai,j

  • ai,j前面有0j-1j列,每列m个元素,共有j×m个元素。
  • 在第j列中前面有a[0..i-1,j],共i个元素。
  • 合起来,ai,j前面有j×m+i个元素。则:
  • LOC(a_{i, j}) = LOC(a_{0, 0}) + (j \times m + i) \times k

  • 28
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值