数据结构之串和数组基本知识和问题

★★

1. 串(又称字符串)是一种特殊的线性表,它的每个结点仅由一个字符组成。

从数据结构的观点来说,串是一种特殊的线性表;但就数据类型而言,串不是线性表。

**串( String )是零个或多个字符组成的有限序列。 一般记为s= “ a0a1a2...an-1 ”(n≥0,下标从0开始),其中s是串的名,用双引号括起来的字符序列是串的值。

将串值括起来的单引号本身不属于串 , 它的作用是避免串与常数或与标识符 混淆。

2. 长度为零的串称为空串( Empty String ),它不包含任何字符。 仅由一个 或多个空格组成的串称为空白串

串的长度:串中字符的数目n(n ≥ 0)。

3. 串中任意个连续字符组成的子序列称为该串的子串。包含子串的串相应地称为主串

** ①空串是任意串的子串** ②任意串是其自身的子串

字符在串中的位置:字符在序列中序号。 子串在主串中的位置:子串的第0个字符在主串中的位置。例如:a="BEI",b= "JING ",c="BEIJING",d="BEI JING" //串长分别为3,4,7,8,且a,b都是c,d的子串。 两串相等:两个串对应位置的字符相等且长度相等。 两个串的比较:从第一个字符开始,每个字符按照ASCII比较,整体按照英语字典的顺序(前小,后大)。

串的逻辑结构和线性表的区别:

  1. 串的数据对象约束为字符集。

  2. 线性表的基本操作大多以“单个元素”为操作对象,而串的基本操作通常以“串的整体”作为操作对象。

串的模式匹配算法(模式匹配(Pattern Matching) 即子串定位运算(Index函数)—)

算法目的:确定主串中所含子串第一次出现的位置(定位) ——即如何实现Index(S,T,pos)函数

BF算法 (又称古典的、经典的、朴素的、穷举的) KMP算法 (特点:速度快)

初始条件:串S和T存在,T是非空串,1≤pos≤StrLength(s)
操作结果:若主串S中存在和串T值相同的子串,则返回它在主串S中第pos个字符之后第一次出现的位置;否则函数值为0。

BF算法设计思想:

  将主串的第pos个字符和模式的第1个字符比较,
  若相等,继续逐个比较后续字符;
  若不等,从主串的下一字符(pos+1)起,重新与第一个字符比较。
  直到主串的一个连续子串字符序列与模式相等 。返回值为S中与T匹配的子序列第一个字符的序号,即匹配成功。
  否则,匹配失败,返回值 0 .

数组的顺序表示和实现 用一组连续的存储单元存放数组的数据元素。 有两种顺序映象的方式: 1)以行序为主序的存储方式(低下标优先) 2)以列序为主序的存储方式(高下标优先) 以“行序为主序”的存储映象介绍: 设二维数组Am中每个元素占L个存储单元,则任一元素ai,j 的存储位置: LOC(i,j) = LOC(0,0) + (n×i+j)×L

“数组的处理比其它复杂的结构要简单”

对的。因为:
① 数组中各元素具有统一的类型;
② 数组元素的下标一般具有固定的上界和下界,即数组一旦被定义,它的维数和维界就不再改变。
③数组的基本操作比较简单,除了结构的初始化和销毁之外,只有存取元素和修改元素值的操作

 

三元素组表中的每个结点对应于稀疏矩阵的一个非零元素,它包含有三个数据项,分别表示该元素的 行下标 、列下标和元素值

若采用三元组压缩技术存储稀疏矩阵,只要把每个元素的行下标和列下标互换,就完成了对该矩阵的转置运算,这种说法正确吗?

肯定不正确!
除了: (1) 每个元素的行下标和列下标互换(即三元组中的i和j互换);
还应该 (2) T的总行数mu和总列数nu与M值不同(互换);
              (3) 重排三元组内元素顺序,使转置后的三元组也按行(或列)为主序有规律的排列。
​
难点在3可以使用
压缩转置或者
(压缩)快速转置
解决思路:只要做到
        将矩阵行、列维数互换
     将每个三元组中的i和j相互调换
     重排三元组次序,使mb中元素以N的行(M的列)为主序
​
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值