4.1字符串
- 串:零个或多个字符组成的有限序列。
- 串长度:串中所包含的字符的个数。
- 空串:长度为0的串。
串的逻辑结构
- 字串:串中任意个连续的字符组成的子序列。
- 主串:包含字串的串。
- 字串的位置:字串的第一个字符在主串中的序号。
串的存储结构
- 顺序串:用数组来存储串中的字符序列。
- 链接串:用连接存储结构来存储串。
模式匹配:
- 给定主串S=”s1 s2 s3…sn“和模式T=”t1t2t3t4…tm“,在s中寻找T的过程称为模式匹配。
如果匹配成功,返回T在S中的位置,如果匹配失败,返回-1. 假设串采用顺序存储结构,串值从0号单元开始存放。
从主串S的第0个字符开始和模式T的第0个字符进行比较, 若相等,则继续比较两者的后序字符;
否则,从主串的第1个字符开始和模式T的第0个字符进行比较, 重复上述过程,直到T中的字符全部比较完毕,则说明匹配成功;
或S中字符全部比较完,则说明匹配失败。
4.2多维数组
- 数组的定义
- 数组的特点
4.3矩阵的压缩
- 特殊矩阵:矩阵中很多值相同的元素并且他们的分布由一定的规律。
- 稀疏矩阵:矩阵中由很多零元素。
压缩存储的基本思想是:
1.为多个值相同的元素只分配一个存储空间
2.对零元素不分配存储空间 对称矩阵的压缩 aij在以为数组中的序号=i*(i-1)/2+j 因为一维数组下标从零开始 因此可以推得
对于下三角中的元素aij(i>j),在以为数组中的下标k与i,j的关系为
k=i*(i-1)/2+j-1;
上三角中的元素aij(i<j),因为aij=aji则访问和它对应的元素aji即可
即:
k=j*(j-1)/2+i-1;
对角矩阵的压缩
以行序为主序,aij在一维数组中的地址k=(3*(i-1)-1)+(j-i+1))
k=2i+j-3
稀疏矩阵的压缩
行号,列号,非零元素值——三元组
定义三元组
template<class T>
struct element
{
int row,col;//行号,列号
T item;/非零元素值
}
三元组顺序表
const int MaxTerm=100;
template <class T>
struct SparseMatrix
{
T data[MaxTerm]; //存储非零元素
int mu, nu, tu; //行数,列数,非零元个数
};