数据结构之广义表

作者: 理想是一盏灯 | 来源:发表于2018-03-02 16:12 被阅读148次

定义

广义表是线性表的推广,线性表中的元素都是原子的单元素,而广义表中的元素可以是原子的单元素,也可以是一个子广义表。广义表的定义是递归的,广义表是线性表的递归数据结构

(1)广义表常用表示

  ① E=()

  E是一个空表,其长度为0。

  ② L=(a,b)

  L是长度为2的广义表,它的两个元素都是原子,因此它是一个线性表

  ③ A=(x,L)=(x,(a,b))

  A是长度为2的广义表,第一个元素是原子x,第二个元素是子表L。

  ④ B=(A,y)=((x,(a,b)),y)

  B是长度为2的广义表,第一个元素是子表A,第二个元素是原子y。

  ⑤ C=(A,B)=((x,(a,b)),((x,(a,b)),y))

  C的长度为2,两个元素都是子表。

  ⑥ D=(a,D)=(a,(a,(a,(…))))

  D的长度为2,第一个元素是原子,第二个元素是D自身,展开后它是一个无限的广义表

(2)广义表的深度

一个表的"深度"是指表展开后所含括号的层数。

【例】表L、A、B、C的深度为分别为1、2、3、4,表D的深度为∞。

广义表的存储结构

广义表中的元素可以是单元素,也可以是广义表,因为具有不同的结构,所以用顺序存储结构实现的难度比较大,因为很难为每个广义表分配固定大小的存储空间,所以通常采用链式存储结构

广义表的节点类型

广义表的类型定义

广义表的类型定义

广义表可以分为两个部分,头部和尾部,头部是广义表的第一个元素,尾部是广义表的除第一个元素的其他子元素,也就是前面的GeneralizedNode.sublist和GeneralizedNode.next

广义表的长度

可以用递归实现,即

1(头部元素)+尾部元素的长度

广义表长度

广义表的深度

空表或仅由单元素构成,则深度为1,可以用递归实现,即

子表的最大深度+1

广义表深度

查找值为obj的元素

也用递归实现,当当前子元素为广义表时,则递归查找,否则为单元素,直接比较;依次遍历完整个广义表。

查找值为obj的元素

广义表的创建

空表用#表示,如(#),广义表的结束用;号表示,例如:       (a,(#),b,c,(d,(e)));

广义表的创建

打印广义表

打印广义表

清空广义表

清空广义表

非法字符处理

非法字符处理

测试类及结果

测试类及结果

相关文章

  • 广义表

    广义表的定义 广义表是线性表的推广,是一种非线性的数据结构,也有人称其为列表。广义表的实现主要应用递归,通过广义表...

  • 数据结构之广义表

    定义 广义表是线性表的推广,线性表中的元素都是原子的单元素,而广义表中的元素可以是原子的单元素,也可以是一个子广义...

  • 数据结构(广义表)

    1. 广义表的定义 广义表简称表,它是线性表的推广。一个广义表是n(n>=0)个元素的一个有限序列,当n=0时称为...

  • #数据结构#—广义表

    广义表 广义表,又称列表,也是一种线性存储结构。同数组类似,广义表中既可以存储不可再分的元素,也可以存储广义表,记...

  • 广义表

    广义表广义表的定义广义表的存储结构广义表的M元多项式广义表的递归算法 一、广义表的定义:广义表(Lists,又称列...

  • 数据结构 串 数组 广义表

    概述 串:字符串的简称,串是一种特殊的线性表,特殊在其数据元素都是一个字符。 数组和广义表可以看做是线性表的扩充,...

  • 深入Python数据结构(一)——list

    1. 前言 列表是Python中最基本的数据结构。类似于数据结构中的广义表[?]。列表是最常用的Python数据类...

  • 数据结构

    广义表 数据结构中,广义表是一种比较重要的结构,至少在我看来 更新一下,上面的代码除了一点点问题,原因就是那几个i...

  • 广义表

    是由零个或多个原子或子表组成的优先序列,是线性表的推广。 广义表的存储结构 广义表中的数据元素可以具有不同的结构,...

  • 广义表

    1. 广义表:元素为原子项或广义表 A = () —— 空表,长度为0B = (e) —— 表B只有一个原子e,...

网友评论

    本文标题:数据结构之广义表

    本文链接:https://www.haomeiwen.com/subject/lfmaxftx.html