数据结构4

您所在的位置:网站首页 与入相同结构的字 数据结构4

数据结构4

2023-03-19 23:24| 来源: 网络整理| 查看: 265

文章目录 1.串的定义2.串的储存结构及其运算3.数组4.广义表1.串的定义2.1串的储存结构2.2串的模式匹配算法2.2.1BF算法2.2.2KMP算法 3.1数组的类型定义3.2数组的顺序存储3.3特殊矩阵的压缩存储4.1广义表的定义4.2广义表的存储结构

1.串的定义 2.串的储存结构及其运算 串的储存结构串的模式匹配算法(BF,KMP) 3.数组 数组的类型定义数组的顺序存储特殊矩阵的压缩存储 4.广义表 广义表的定义广义表的存储结构 1.串的定义

🔵

串的逻辑结构与线性表相似,区别仅在于串的数据对象限定为字符集

串是一种特殊的线性表

串通常以整体作为操作的对象,线性表通常以单个元素作为操作对象

串或字符串:是由零个或多个字符组成的有序序列

字串:串中任意个连续的字符组成的子序列

空串:零个字符的串

🔴空格串:由空格组成的串

2.1串的储存结构

串有两种基本存储结构:顺序存储,链式存储

顺序存储

用一组地址连续的存储单元存储串值的字符序列

串的存储可以用定长一维数组来表示

⚫️ ::顺序存储的字符串都是从下标为1的数组分量开始存储,下标为0的分量闲置不用

堆式顺序存储:在堆区上动态分配和释放字符数组空间

链式存储

为了方便串的操作,设头指针和尾指针分别指向第一个节点和最后一个节点

🔴当字符无法完全将串的节点占满,用#来补满剩下的空间

块链存储:每个节点可以存放一个或多个字符,称每一个节点为块,称整个链表为块链结构

2.2串的模式匹配算法

字串的定位运算一般称串的模式匹配或串匹配

著名的两种算法BF ,KMP

2.2.1BF算法

用指针i,j指示主串S和子串T中当前待比较的字符位置,i的初值为pos,j的初值为1

如果两个串均未达到串尾,则循环执行以下操作

分别比较指针i,j所指的字符,若相等则指针i,j同时向后移动一位,继续比较

若字符值不相等,则指针退后重新开始匹配,变成i=i-j+2,j=1,然后重新匹配

(指针i,j最开始指向下标为1的数组元素,每次回溯时,指针i向后移动一位,指针j回到原点)

🔴模式匹配不一定从主串的第一个位置开始,可以从指定的主串中查找的起始位置pos

2.2.2KMP算法

只移动子串,让模式串向右移动,不需要回溯主串指针

当第一个位置就出现字符不匹配,字串移动到主串的第二位进行比较当其他位置出现字符不匹配,寻找公共前后缀当字符匹配时,子串的比较箭头向后移动一位继续比较

让模式串向右滑动,将前缀的字符串直接移动到后缀字符串的位置,然后让子串的n号位

在与主串当前位置进行比较

🔴(n=公共前后缀长度+1)

这是因为: 如果字符匹配时,模式串上的比较箭头会向后移动一位

而当遇到字符不匹配时,模式串需要向右移动,主串保持不动,而指向模式串的比较箭头仍留在原地,

所以下一次再比较时,该比较箭头指向的位置n会发生改变

3.1数组的类型定义

数组是由类型相同的数据元素构成的有序集合,每个元素称为数组元素

数组可以看成线性表的推广,其特点是结构中的元素本身可以具有某种结构的数据,但属于同一数据类型

3.2数组的顺序存储

对于数组,一旦规定了其维度和各维的长度,便可以为它分配空间,

而只要给出一组下标则可以求相应的数组元素的存储位置

设有一个二维数组A[M][N]按行优先顺序存储,假设A[0][0]放在位置644中,A[2][2]放在位置676,每个元素占一个空间,问A[3][3]存放在什么位置 2n+2=676-644 N=15 A[3][3]一共有3n+3=48 所以A[3][3]存放在48+644=692的位置上

🔴下标存放从1开始

3.3特殊矩阵的压缩存储

所谓压缩存储,是指为多个值相同的元只分配一个储存空间,对零元不分配空间

对称矩阵(关于主对角线左右元素相同)三角矩阵(主对角线一边全为0/常数c)对角矩阵(所有非零元素都集中在对角线中心的带状区域中,其他元全为0)十字链表(链式)稀疏矩阵(非零个数少) 4.1广义表的定义

广义表是线性表的推广,也称为列表

对于线性表而言,存储的数据元素只能是单个元素,而在广义表中,数据元素可以是单个元素,称为原子,也可以是一个广义表,称为子表

🔴:广义表的定义是一个递归的定义

两种重要的运算取表头 取表尾

取表头

取出的表头为非空广义表的第一个元素,它可以是单原子,也可以是一个子表

取表尾

取出的表尾为除去表头以外的全部元素构成的表

表尾一定是一个广义表

4.2广义表的存储结构

由于广义表中的数据元素可能为原子或者广义表,因此需要两种结构的结点

一种是表结点,用于表示广义表

另一种是原子结点,用于表示原子

🔴一对确定的表头和表尾可唯一确定广义表

表结点:由标志域,指示表头的指针域,指示表尾的指针域组成

原子结点:由标志域和值域组成

标志域:tag,tag=1表示结点为子表,tag=0表示结点为原子

🔵:广义表的长度和深度

广义表长度:广义表中第一层的元素个数(第一个括号里面的元素个数)

(a,(b,c,d)) 长度为2 ((a,(b,c,d))) 长度为1

广义表深度:广义表的最大的嵌套次数

((a,(b,c,(d,e)))) 深度为4


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3