数据结构--串、数组、广义表

这篇具有很好参考价值的文章主要介绍了数据结构--串、数组、广义表。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

定义

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
也叫字符串
数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

案例引用

数据结构--串、数组、广义表,数据结构

串的类型定义以及存储结构

抽象类型定义

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

存储结构(顺序表较为常用)

数据结构--串、数组、广义表,数据结构

顺序存储结构

数据结构--串、数组、广义表,数据结构
为了方便一些操作,通常串的数组的第一个位置不放元素,而是从ch【1】开始存放元素

链式存储结构

数据结构--串、数组、广义表,数据结构
如果一个结点的数据域只放一个字符,那么会导致存储密度异常的底,解决这个问题:在数据域放更多的字符数据
数据结构--串、数组、广义表,数据结构
上面的结构体定义结点结构,下面定义链表头指针

可以得知,对于好多功能的链式表示都是定义两个结构:一个是结点、一个是指向第一个结构体的指针所组成的结构体
定义链表时:先定义第二个结构体的对象,创建出链表头指针,如果要创建新的结点,那么要用到第一个结构体,进行插入即可

实际上 第二个结构体定义只是对第一个结构体里面的第二个重命名(也就是*Queueptr)做一个拓展 本质上还是第一个结构体即可 第二个结构体均属于指向第一个结构体的指针类型 没有第二个结构体的话 在程序里仍然可以定义指向第一个结构体的指针

串的模式匹配算法(查找主串中是否有某个字串)

BF算法

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
如果匹配失败,那么需要对两个串的下标进行回溯,从而重新比较下一组

对于主串,先回溯到原始位置:i=i-(j-1)
因为对于串的第一个下标都是1,所以,j移动的格数是j-1,而i与j同步移动,所以,回溯到原始位置是i-(j-1)
之后,因为要进行下一组比较,所以,i回到原始位置之后,还需要后移一位,所以i=i-(j-1)+1

对于字串,直接回到第一个位置即可:j=1
数据结构--串、数组、广义表,数据结构
由于第一个位置下标为1,方便了这里字串位置的计算,直接i-T.length即可

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
while循换条件:当主串的下标或者字串的下标有一个出界,那就代表匹配结束,最后要么匹配成功(j>=T.length)要么匹配失败,循环继续的条件是二者都没有出界,一旦有一个出界,那么结果为假,那么整体为假,&&一假则假

数据结构--串、数组、广义表,数据结构
最好情况是o(1)
最坏情况是o(n*m)

综合平均:o(n*m)

KMP算法
设计思想

数据结构--串、数组、广义表,数据结构

对字串的回溯进行了优化

数据结构--串、数组、广义表,数据结构
对于第一个max 其中的条件是 模式串中 j前面的字符串 该字符串的前缀==后缀 那么就可以得到k
数据结构--串、数组、广义表,数据结构
当字串第j个元素失配,需要回溯到的下标位置,放入数组next【j】中

第一个元素失配,那么需要回溯到0,但是由于没有0位置,所以实际上的操作是i++,j仍然是1
之后的元素 想看是否满足其前面的首位子集是否相等,例如j=5时,前四个元素,先看1、4,二者相等,所以k-1=1,那么k=2,之后再看12、34,再看123、234,如果有更大的k,那么就取最大的k为最终值,注意不能全部包含 例如1234,这样是不可以的

如果这种情况也不满足,就是其他情况,next【j】=1

代码

kmp算法:
数据结构--串、数组、广义表,数据结构
next【j】的算法:
数据结构--串、数组、广义表,数据结构

对next【j】进行优化

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

按照上述标黄的语句,进行分析即可,开头两位一般是01 或者00
之后 如果回溯位置的元素与自身相同,那么val值与回溯位置的next值一样,如果不同 ,那么仍然是自己的next值
最后要注意标黄的第四种情况,也就是如果相同,每次要判断到第一位为止

总结来说 不同为自身,相同做替换,不同则停止,相同则到底

改进后的next【j】:
数据结构--串、数组、广义表,数据结构

数组

类型

一维数组

数据结构--串、数组、广义表,数据结构

二维数组

数据结构--串、数组、广义表,数据结构
二维数组可以是非线性结构,也可以是特殊的线性结构

特殊的线性结构:将一行看成一个线性结构,该行的每个元素是一个列向量
数据结构--串、数组、广义表,数据结构
分开定义,实际上就是对特殊的线性结构的代码解释

数据结构--串、数组、广义表,数据结构
数组一旦定义,那么长度固定,所以一般只是做取元素和修改元素操作

抽象类型定义

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

顺序存储结构

数据结构--串、数组、广义表,数据结构
因为内存单元只能是线性的,但是数组有多维,所以要想办法将多维关系映射到一维关系,接下来通过找指定元素的地址来反映这个关系,接下来就是解决这个问题

已知首元地址,求某个元素的地址(该元素第一个字节的地址)

一维数组
数据结构--串、数组、广义表,数据结构

二维数组
数据结构--串、数组、广义表,数据结构

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

数据结构--串、数组、广义表,数据结构
也就是(第一维下标*列数+第二维下标)*一个元素所占字节数+首元地址=目标元素的地址
(本质上,是要求该元素的前面有几个元素,但是因为下标都是从0开始,所以根据数学关系,下标的数就是该元素之前有几个元素的多少)

三维数组
数据结构--串、数组、广义表,数据结构

n维
数据结构--串、数组、广义表,数据结构

案例
数据结构--串、数组、广义表,数据结构
注意这里假设元素占用一个空间,先利用第一个条件求出列数,之后利用公式,求出答案

特殊矩阵的压缩存储

数据结构--串、数组、广义表,数据结构

数据结构--串、数组、广义表,数据结构

对称矩阵

数据结构--串、数组、广义表,数据结构
只存上三角或者下三角,元素位置:i*(i-1)/2+j 这就是目标元素前面的元素个数

三角矩阵

数据结构--串、数组、广义表,数据结构

带状矩阵

数据结构--串、数组、广义表,数据结构

稀疏矩阵

顺序结构

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

链式结构

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
每行每列都有许多头指针,负责该行或者该列

每个非零元素都有一个结点,该结点包括行数、列数、值、指向下方的结点、指向右方的结点,

广义表

简介

数据结构--串、数组、广义表,数据结构

数据结构--串、数组、广义表,数据结构
这里注意 表尾:1.是除了第一个元素之外的所有元素组成的表
2.一定是一个表,所以求表尾第一步:先写一个括号,之后看去掉表头之后,剩什么就直接填入括号里

数据结构--串、数组、广义表,数据结构
例如 第二题 表头是第一个元素,第一个元素就是一个空括号 所以就是:()
表尾 先写一个空括号(),之后看除去表头之后 什么也没有了 就是空,所以 括号里什么都不写 所以还是()

第三题 表头:a
表尾:先写一个空括号,之后,将除去表头的剩下的元素填入空表中,也就是((b,c))

性质

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构

基本运算

数据结构--串、数组、广义表,数据结构

案例

数据结构--串、数组、广义表,数据结构
数据结构--串、数组、广义表,数据结构
循环m(模式串的长度)次,就可以将所有可能的情况都取得了文章来源地址https://www.toymoban.com/news/detail-608047.html

到了这里,关于数据结构--串、数组、广义表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构之数组、矩阵和广义表

      数据结构是程序设计的重要基础,它所讨论的内容和技术对从事软件项目的开发有重要作用。学习数据结构要达到的目标是学会从问题出发,分析和研究计算机加工的数据的特性,以便为应用所涉及的数据选择适当的逻辑结构、存储结构及其相应的操作方法,为提高利用

    2024年01月22日
    浏览(44)
  • 数据结构与算法·第5章【数组和广义表】

    两种顺序映象的方式: 以行序为主序(低下标优先); 以列序为主序(高下标优先)。 而 n n n 维数组: LOC(x1, x2, ..., xn) = LOC(0, 0, ..., 0) + [(x1 × b1 + x2) × b2 + x3] × b3 + ... + xn 数据类型定义 其中: A.bounds是每一维可以放多少元素: a[A.bounds[0]][A.bounds[1]][A.bounds[2]]…… A.constants是指向每

    2024年02月08日
    浏览(46)
  • 【数据结构】——多维数组、矩阵以及广义表的相关习题

    1、数组通常具有的两种基本操作是()。 A、查找和修改 B、查找和索引 C、索引和修改 D、建立和删除 解析: (A) 基本操作是查找和修改,其中每个元素都可以通过其索引来访问,这是从数组的第一个元素开始计算的。除了访问和修改数组元素之外,还可以执行其他一些操

    2024年02月04日
    浏览(36)
  • 数据结构--》数组和广义表:从基础到应用的全面剖析

            数据结构为我们提供了组织和处理数据的基本工具。而在这个广袤的数据结构领域中,数组和广义表是两个不可或缺的重要概念。它们作为线性结构的代表,在算法与应用中扮演着重要的角色。         无论你是初学者还是进阶者,本文将为你提供简单易懂、

    2024年02月08日
    浏览(45)
  • 数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)三

    数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵的角度讨论二维数组的存储,同时讲解广义表的存储结构以及有关其广度和

    2024年01月21日
    浏览(48)
  • 数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)五

    数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵的角度讨论二维数组的存储,同时讲解广义表的存储结构以及有关其广度和

    2024年01月23日
    浏览(49)
  • 数据结构与算法分析 第七章 串、数组和广义表 作业讲解

     参考教材: 《数据结构(C语言版 第2版)》 严蔚敏,李冬梅,吴伟民编著,人民邮电出版社,2022年版。 截图未标明出处均为原创或取自《数据结构(C语言版 第2版)》~   本文对应的作业题讲解视频:   数据结构与算法分析作业讲解视频合集 https://www.bilibili.com/video/BV1N

    2024年02月04日
    浏览(46)
  • 数据结构-广义表的存储结构(两种)

    头尾链表的存储结构由两种节点结构组成: 表结点 表节点由三部分组成,tag为标志,tag=1表示表节点,tag=0表示原子节点,hp和tp表示两个指针,hp指向该节点的下一层的节点,tp指向同一层的后一个节点。 原子节点 原子节点由两部分部分组成,tag为标志,tag=1表示表节点,

    2024年01月19日
    浏览(43)
  • 数据结构——线性数据结构(数组,链表,栈,队列)

    数组(Array) 是一种很常见的数据结构。它由相同类型的元素(element)组成,并且是使用一块连续的内存来存储。 我们直接可以利用元素的索引(index)可以计算出该元素对应的存储地址。 数组的特点是: 提供随机访问 并且容量有限。 2.1. 链表简介 链表(LinkedList) 虽然是

    2024年02月11日
    浏览(41)
  • 【算法 & 高级数据结构】树状数组:一种高效的数据结构(一)

    🚀 个人主页 :为梦而生~ 关注我一起学习吧! 💡 专栏 :算法题、 基础算法~赶紧来学算法吧 💡 往期推荐 : 【算法基础 数学】快速幂求逆元(逆元、扩展欧几里得定理、小费马定理) 【算法基础】深搜 树状数组 (Binary Indexed Tree,BIT)是一种数据结构,用于高效地处理

    2024年03月11日
    浏览(65)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包