数据结构4 |
您所在的位置:网站首页 › 与入相同结构的字 › 数据结构4 |
文章目录
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 |