广义表

广义表的概念

定义:广义表(又称列表Lists)是n≥0个元素,a0,a1,…,an-1的有限序列,其中每一个ai或者是原子,或者是一个广义表。

  • 广义表通常记作:LS=(a1,a2,…,an)

    • 其中:LS为表名,n为表长,每一个ai为表的元素
    • 习惯上,一般用大写字母表示广义表,小写字母表示原子

表头:

  • 若 LS 非空(n >= 1),则其第一个元素 a1 就是表头。
  • 记作 head(LS) = a1。
  • 注:表头可以是原子,也可以是子表。

表尾

  • 除表头之外的其他元素组成的表。
  • 记作:tail(LS) = (a2, …, an)。
  • 表尾不是最后一个元素,而是一个子表(头以下全是腿)。

广义表的性质

  1. 广义表中的数据元素也是有相对次序的;一个直接前趋和一个直接后继(表头表尾除外)
  2. 广义表的长度定义为最外层所包含元素的个数。
    • 如: C = (a,(b,c)),就是长度为 2 的广义表。
  3. 广义表的深度定义为该广义表展开后所含括号的重数。
    • 如: A = (b,c)的深度为1。B = (A,d)的深度为 2。B展开后是((b,c),d),有两层括号。C = (f,B,h) 的深度为3,C展开后是 (f,((b,c)d),h),有三重括号。
    • 注意:“原子”的深度为 0 ,没有括号。“空表”的深度为 1,有1层括号了。
  4. 广义表可以为其他广义表共享;如:广义表 B 就共享表 A。在 B 中不必列出 A 的值,而是通过名称来引用,B = (A)。
  5. 广义表可以是一个递归的表。
    • 如:F = (a,F) = (a,(a,(a,…)))。这个表的长度是2,深度是无穷的。
    • 注意:递归表的深度是无穷值,长度是有限值。
  6. 广义表是多层次结构,广义表的元素可以是单元素,也可以是子表,而子表的元素还可以是子表。
    • 例:D = (E,F),其中:E = (a,(b,c)) ,F = (d,(e))

广义表与线性表的区别

  • 广义表可以看成是线性表的推广,线性表是光一包的特立。
  • 广义表的结构相当灵活,在某种前提下,它可以兼容线性表,数组。数和有向图等各种常用的数据结构。
  • 当二维数组的每行(或每列)作为子表处理时,二维数组即为一个广义表。
  • 另外,树和有向图也可以用广义表来表示。
  • 由于广义表不仅集中了线性表、数组、树和有向图等常见数据结构的特点,而且可有效地利用存储空间,因此在计算机的许多应用领域都有成功使用广义表的实例。

广义表的基本运算

  1. 求表头GetHead(L):取出的表头作为非空广义表的第一个元素,它可以是一个单原子,也可以是一个子表。
  2. 取表尾GetTail(L):取出的表尾为除去表头之外,由其余元素构成的表,即表尾一定是一个广义表。
  • 例如

    D=(E ,F)=( ( a , ( b , c ) ) , F )

    • GetHead(D) = E ,GetTail(B) = (F)
    • GetHead(E) = a ,GetTail(E) = ((b,c))
    • GetHead(((b,c))) = (b,c) ,GetTail(((b,c))) = ( )
    • GetHead((b,c))= b ,GetTail((b,c)) = ©
    • GetHead©= c,GetTail(b,c) = ( )
    • 由于(B,C)为非空广义表,则可继续分解得到:GetHead(B,C) = B,GetTail(B,C) = ©。

11广义表的基本概念和性质相关推荐

  1. 【数据结构】广义表的基本概念

    广义表的基本概念 广义表不是考试的重点,只要理解基本概念就行了. 书上介绍的广义表,我觉得简单来理解的话就是狭义的列表,因为书上规定了列表的表头可以是原子或者子表,但是表尾必须是子表,在python中 ...

  2. 广义表的基本概念【数据结构】

    实名广义表与匿名广义表的区别:对于匿名的广义表的表示方法我们认为一对括号就是一个广义表,里面的数据可以是广义表也可以是 原子,对于有名字的广义表,也就是大写的字母我们可以直接认为大写的就是广义表的表示 ...

  3. C++(数据结构复习篇)(数组【压缩】|广义表)的概念和相关算法)

    多维数组的定义格式 特点:结构固定 成功定义后,维数和维界都不再改变 基本操作:初始化 InitArry(&A,n,bound1,boundn) //构造数组A                 ...

  4. 数据结构之【数组和广义表】复习题

                          第 4  章  数组和广义表 一.选择题 1. 将一个A[1..100,1..100]的三对角矩阵,按行优先存入一维数组B[1‥298]中,A中元素A666 ...

  5. 数据结构之广义表的相关知识点

    一,广义表的基本概念: 广义表(Lists,又称列表)是一种非线性的数据结构,是线性表的一种推广.即广义表中放松对表元素的原子限制,容许它们具有其自身结构(即可以有子表).它被广泛的应用于人工智能等领 ...

  6. NOJ-求广义表的深度(C语言描述)

    NOJ-求广义表的深度 第一次写博客,希望能够记录下自己的心得体会,如有错误, 欢迎指正. 广义表的基本概念 广义表是线性表的推广,是典型的递归定义. 广义表由两部分组成--表头(Head),表尾(t ...

  7. 广义表的长度和深度怎么算_C语言:数据结构-广义表的定义和图形表示

    广义表又称为列表,是线性表的推广.一般记为:LS=(a1,a2, - ,an)其中LS是广义表(a1,a2, - ,an)的名称,ai(i=1,2,-,n)是表的元素.与线性表的区别是:其中的ai可以 ...

  8. C语言——数据结构之广义表(概念及其存储结构)

    前言 本节我们来说说C语言中的广义表.主要介绍广义表的概念定义,并说明其存储结构,算法中将使用到递归思想. 广义表是线性表的一种推广,在数据结构中有广泛应用. 一.广义表的概念 1.广义表的概念 (1 ...

  9. 广义表的概念及存储表示

    文章目录 广义表的概念 广义表的特性 广义表的表头和表尾 广义表的链接存储表示 头尾表示法 扩展线性链表表示法 广义表的概念 广义表的定义:广义表是 n ( n ≥ 0 ) n\ (n≥0) n (n ...

最新文章

  1. 计算机网络实验报告建立校园网,计算机网络实验报告
  2. cdn托管html资源,七牛自定义域名cdn加速,静态资源托管至对象存储
  3. 关于linux下目录树的查看TEEE命令
  4. win2003下如何自动备份MySQL数据库
  5. testng重跑和框架亮点
  6. Mongdb中常用的数据清洗
  7. echarts地图地名显示_echarts地图 省份名称自定义位置和居中解决办法
  8. 【转】关于python中re模块split方法的使用
  9. 计算机ps基础知识大全,全国计算机ps一级考试题型
  10. Echarts 实现 设备运行状态图 工业大数据展示
  11. 互联网晚报 | 9月16日星期五 | ​B站回应诉争“哔哩哔哩”商标被驳回;​苹果占国内高端机70%份额;​蔚来手机被曝明年发布...
  12. 中断 10 分钟,改变孩子沉迷游戏的习惯
  13. 安装mediawiki维基百科
  14. 最全面的Fiddler界面讲解#工作原理#菜单栏#工具栏#底部状态栏#底部自带命令行控制台#session栏#request栏和response栏
  15. Java实现MD5和国密SM3摘要算法
  16. 利用计算机的认识与感受制作海报,手绘pop海报在大学中的应用和现实意义
  17. 我问了10个博客专家好友,原来他们都在用这些高效率软件
  18. 【2. Redis 高级数据结构】
  19. Html+CSS+JS轮播图:手动轮播,自动轮播
  20. 前端进阶之javaScript

热门文章

  1. git 误删分支恢复方法
  2. 思考:客户满意度(CSAT)和净满意度(NSS)区别在哪?
  3. 青龙面板 Bot配置教程
  4. 恭喜河南建业冲上中超
  5. 艺赛旗(RPA)Python 读写 ini 配置文件
  6. 编程语言:Java与C语言C++的区别是什么?知道该学什么了吧!
  7. Java程序员必修内功心法!(内功修炼第三层)
  8. [黑马程序员C++笔记]P99-P104类和对象-封装
  9. java象棋实验报告_中国象棋java程序设计实验报告
  10. Flutter使用Provider