-
字符串和多维数组
一.字符串
✔串是零个或多个字符组成的有序序列
✔串长度是串中所包含的字符个数
✔空串指长度为零的串
✔主串是指包含子串的串
✔子串是指串中任意个连续的字符组成的子序列
✔顺序串:用数组来存储串中的字符序列
✔表示串的长度:
方案1:用一个变量来表示串的实际长度
方案2:在串尾存储一个不会在串中出现的特殊字符作为串的终结符,表示串的结尾。
方案3:用数组的0号单元存放串的长度,从1号单元开始存放串值。
二.匹配模式
✔BF算法:在S中寻找T 的过程称为模式匹配。
✔基本思想:
从主串S的第0个字符开始和模式T 的第0个字符进行比较,
若相等,则继续比较两者的后续字符;
否则,从主串S的第1个字符开始和模式T 的第0个字符进行比较,
重复上述过程,直到T 中的字符全部比较完毕,则说明本趟匹配成功;或S中字符全部比较完,则说明匹配失败。
✔匹配模式
int BF(char S[ ], char T[ ])
{
i=0; j=0;
while (i<S.Length()&&j<T.length())
{
if (S[i]==T[j])
{i++;
j++;
}
else {
i=i-j+1; j=0;
}}
if (j>=T.length()) return (i-j);
else return -1;
}
✔KMP算法
i可以不回溯,模式向右滑动到的新比较起点k ,并且k 仅与模式串T有关!
✔
nt KMP_FindPat(char *s, char *t,int *next)
{
int i=0,j=0,k;
while(s[i]!='\0' && t[j]!='\0') {
if(j==-1 || s[i]==t[j]) {
i++;
j++;
}
else
j=next[j];
}
if(t[j]=='\0')
return i-j;
else
return -1;
}
三.多维数组
✔多维数组:线性表中的数据元素可以是线性表,但所有元素的类型相同。
✔数组是由一组类型相同的数据元素构成的有序集合,每个元素受n(n≥1)个线性关系的约束,并称该数组为 n 维数组。
✔元素本身可以具有某种结构,属于同一数据类型;
数组是一个具有固定格式和数量的数据集合。✔ 存取:给定一组下标,读出对应的数组元素;修改:给定一组下标,存储或修改与其相对应的数组元素。
存取和修改操作本质上只对应一种操作——寻址。
✔数组的储存结构:按行优先:先行后列,先存储行号较小的元素,行号相同者先存储列号较小的元素。
按列优先:先列后行,先存储列号较小的元素,列号相同者先存储行号较小的元素。
✔特殊矩阵:矩阵中很多值相同的元素并且它们的分布有一定的规律。
稀疏矩阵:矩阵中有很多零元素。
✔十字链表结点类的定义
template<class T>
class OLNode
{
public:
int row,col;
T element;
OLNode<T>* right,*down;
public:
OLNode(){right=NULL;down=NULL;};
};
✔ 广义表: 广义表(列表):n 个表元素组成的有限序列,记作:
LS = (a0, a1, a2, …, an-1)
LS是表名,ai是表元素,它可以是表 (称为子表),可以是数据元素(称为原子)。
n为表的长度。n = 0 的广义表为空表。
✔广义表与线性表的区别:线性表的成分都是结构上不可分的单元素
广义表的成分可以是单元素,也可以是有结构的表
线性表是一种特殊的广义表
广义表不一定是线性表,也不一定是线性结构。
字符串与多维数组
最新推荐文章于 2022-04-29 20:53:54 发布