数据结构【数组、串、广义表】

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

第四章 数组、串、广义表

一、数组
1.概念:线性表是通过数组实现的,数组是线性表的推广,数组只有存取元素和修改元素的操作(除了初始化和销毁);
2.数组的存储结构:一个数组的所有元素在内存中占用一段连续的存储空间(顺序存储);

  • 以行为主顺序优先存储;
  • 以列为主顺序优先存储。

3.矩阵的压缩存储(节约空间)

  • 对称矩阵:元素关于主对角线对称,利于节约空间,n*(n+1)/2;
    数据结构【数组、串、广义表】,数据结构,数据结构
  • 三角矩阵:上三角或者下三角均为同一个常量,n*(n+1)/2+1;
    数据结构【数组、串、广义表】,数据结构,数据结构
  • 三对角矩阵:第一行和最后一行有2非0数字,其余都是3个非0数字,3n-2;转化为一维数组的话,下标是k=2i+j-1(i是这个元素的纵坐标,j是横坐标);
    数据结构【数组、串、广义表】,数据结构,数据结构
  • 稀疏矩阵:三元组(i,j,v)记录了非零元素的行号i、列号j以及非零的元素v(一般压缩存储方法有三元组顺序表和十字链表);
    数据结构【数组、串、广义表】,数据结构,数据结构

二、串
1.概念:特殊的线性表,数据元素是仅是一个字符组成,所以串是由0个或多个字符组成的有限序列;无元素叫空串(空格串不是空串),包含子串的叫主串,默认以1开头;
2.基本存储方式:顺序存储和链式存储;
3.子串:串中任意连续字符组成的子序列,空串是任意串的子串,任意串是其自身的子串;

  • 长度为n的字符串的子串个数:
    • 有n(n+1)/2 +1个子串;
    • 非空子串:n(n+1)/2;
    • 非空真子串:n(n+1)/2-1。

4.串相等:两串串值相等(相同),但两串长度相等时,各个对应位置的字符都相等才相等;
5.串的模式匹配算法:简单说就是在文本中查找某字符;

  • 简单匹配:时间复杂度O(n*m),n和m分别是主串和模式串(子串)的长度;
    数据结构【数组、串、广义表】,数据结构,数据结构
  • KMP算法:相对比较方便
    数据结构【数组、串、广义表】,数据结构,数据结构
  • 前缀:第一个字母开头,不包括全部;如:absd,前缀是a、ab、ads;
  • 后缀:最后一个字母开头,不包括全部;如:absd,后缀是d、sd、bsd;
  • 求next:next[1]=0,前后缀重合时加1,否则就是1;
    数据结构【数组、串、广义表】,数据结构,数据结构

三、广义表
1.概念:简称表,一种递归的数据结构,通常使用链式存储结构;时线性表的推广,由于有两种数据元素,所以需要两种结构的结点,表结点和原子结点;
数据结构【数组、串、广义表】,数据结构,数据结构
2.特征:文章来源地址https://www.toymoban.com/news/detail-606246.html

  • 广度:定义最外层包含的元素个数,把最外层的括号去掉就很明显了;
  • 深度:定义所含弧的重数;原子深度为0,空表为1;
  • 任何一个非空广义表GL可分解为表头head(GL)=al和表尾tail(GL)=(a2,…,an)两部分;
  • 小写字母表示原子,大写字母表示广义表表名;
  • 例子:A=()
    B=(e)
    C=(a,(bcd))
    D=(A,B,C)=((),(e),(a,(b,cd)) E=((a,(a,b),((a,b),c)))
    A是一个空表,其长度为0,其深度为1;
    B是只含有单个原子e的表,其长度为1其深度为1:
    C有两个元素,一个是原子a,另一个是子表,其长度为2,其深度为2;
    D有三个元素,每个元素都是一个表,其长度为3,其深度为3;
    E中只含有一个元素,是一个表,它的长度为1,其深度为4;
  • 表结点的三个域:标志域、指示表头的指针的指针域、指示表尾的指针的指针域,tag=1;
  • 原子域:两个域,标志域和值域,tag=0;
    数据结构【数组、串、广义表】,数据结构,数据结构
    3.广义表中的head和tail的运算
  • 表头:表中第一个元素,可以是原子、子表;
  • 表尾:必定时子表
  • 操作:取出
    • 例题:已知广义表LS=((a,b,c),(d,e,f)),取出e,使用tail和head如何取出来?tail(LS)=((d,e,f))
      head(tail(LS))=(def) tail(head(tail(LS)))=(e,f) //无论如何都会加上这个()括号
      head(tail(head(tail(Ls)))=e //head可以去除单个元素

到了这里,关于数据结构【数组、串、广义表】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索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

领红包