数据结构——字符串和数组

一·:字符串
(一)字符串是多个字符形成的有序序列,同时,字符串存在一定的逻辑关系:
1)子串:串中任意个连续的字符组成的子序列。
2)主串:包含子串的串。
3)子串的位置:子串的第一个字符在主串中的序号。
(二)串的存储结构
1)顺序串
如:a b c d e f g
长度(1.变量存储 2.一个不属于该类型的内容放在最后一位 3.最开始储存长度)
2)链串
如:1)非压缩:a->b->c->d
2)压缩:abc->d
(三)模式匹配
(1)BF算法
双重循环嵌套,外层为主链,内层为要匹配的链匹配不成功主链后移一位,重新匹配。
缺点:极长要匹配的且解靠后则匹配次数过多,占用时间过长。
(2)KMP算法
与BF开始时比较相同直到遇到不相同的符号,将该符号前推一位,之前的符号以相同数位的主串相同位置比较,知道相同,若为0,则看有符号的第一位,比较,相同即可。

二:数组
1.(多维)数组——线性表中的数据元素可以是线性表,但所有元素的类型相同。
2.广义表——线性表中的数据元素可以是线性表,且元素的类型可以不相同。
(一)数组定义
数组是由一组类型相同的数据元素构成的有序集合,每个元素受n(n≥1)个线性关系的约束,并称该数组为 n 维数组。
(二)特点
元素本身可以具有某种结构,属于同一数据类型;
数组是一个具有固定格式和数量的数据集合。
(三)矩阵压缩
压缩存储的基本思想是:
⑴ 为多个值相同的元素只分配一个存储空间;
⑵ 对零元素不分配存储空间。
1)对称矩阵
aij=aji;
所以只存储半个三角即可,一维数组下标与二维数组下表之间的关系k= i×(i-1)/2+ j-1
2)三角矩阵
一个三角为一个数,所以只需要一个位置即可
以上三角为例
k=(i-1)×(n+n-i+2)/2+j-i(i<=j)
k=n×(n+1) /2 (i>j)
3)对角矩阵(带状矩阵)
1.二维数组
a11 a12 0  0  0
a21 a22 a23 0  0
0 a32 a33 a34 0
0 0 a43 a44 a45
0  0  0  a54 a55
转化为:
0 a11 a12
a21 a22 a23
a32 a33 a34
a43 a44 a45
a54 a55 0
2.一维数组
k=2i+j-3

三:广义表·
(一)广义表(LS = (a0, a1, a2, …, an-1)基本概念
长度:广义表LS中的直接元素的个数;
深度:广义表LS中括号的最大嵌套层数。
表头:广义表LS非空时,称第一个元素为LS的表头;
表尾:广义表LS中除表头外其余元素组成的广义表。
示例:
A =( )
B =(e)
C =(a, (b,c,d))
D =(A, B, C)
E =(a, E)
F =(( ))
对应长度和深度为
长度 深度
0 1
1 1
2 2
3 3
2 无穷
1 2
(二)广义表与线性表的区别
线性表的成分都是结构上不可分的单元素
广义表的成分可以是单元素,也可以是有结构的表
线性表是一种特殊的广义表
广义表不一定是线性表,也不一定是线性结构
(三)广义表的特点
有次序性:一个直接前驱和一个直接后继
有长度:=表中元素个数
有深度:=表中括号的重数
可递归:自己可以作为自己的子表
可共享:可以为其他广义表所共享

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值