第四章 数组和字符串

4.1字符串

  1. 串:零个或多个字符组成的有限序列。
  2. 串长度:串中所包含的字符的个数。
  3. 空串:长度为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;           //行数,列数,非零元个数
    };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值